第6章 继承和接口

上传人:飞*** 文档编号:3965719 上传时间:2017-08-05 格式:PPT 页数:42 大小:898.50KB
返回 下载 相关 举报
第6章 继承和接口_第1页
第1页 / 共42页
第6章 继承和接口_第2页
第2页 / 共42页
第6章 继承和接口_第3页
第3页 / 共42页
第6章 继承和接口_第4页
第4页 / 共42页
第6章 继承和接口_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《第6章 继承和接口》由会员分享,可在线阅读,更多相关《第6章 继承和接口(42页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计,Object-oriented programming,主讲人:徐珊珊辽宁工程技术大学软件学院,Java程序设计实践教程第六章 继承和接口,第六章 继承和接口,类的继承继承中的构造方法方法的重写final关键字对象的类型转换Object类对象的多态性抽象类接口,子类,类的继承,继承,父 类,父类/子类是相对的,xx是一种xx,继承的语法Java中使用extends关键字实现类的继承机制,语法格式为: class 类名 extends 父类名类体子类自动拥有了父类的所有成员(成员变量和方法)。,类的继承,类的继承,编写一个父类使用extends关键字,编写子类,class Pe

2、rsonpublic String name;public int age;public Person(String name,int age)this.name=name;this.age=age;public Person()public void getInfo()System.out.println(name);System.out.println(age);,类的继承,继承的特点,Java只支持单继承不支持多继承,class Aclass B extends Aclass C extends B,子类继承了父类的属性和方法,具有层次结构,继承中的构造方法,继承中的构造方法子类的构造方

3、法调用过程中必须调用其父类的构造方法。子类继承父类所有的成员方法,但不继承父类的构造方法。子类可以在自己的构造方法中调用父类的构造方法,语法形式:super() 或 super(参数列表) ;例:教材P106-DemoSuper.java,继承中的构造方法,继承中的构造方法如果调用super,必须写在子类构造方法的第一句。如果子类的构造方法没有显示的调用父类的构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。例:教材P108-C1.java如果子类构造方法中既没有显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。例:TestSuperSub.java,练习:实

4、验指导6-1,方法的重写,方法的重写在子类中可以根据需要对从父类继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写方法更严格的访问权限。如:父类中的方法是public的,那么子类中的方法就不能是private的。例:TestOverWrite.java,super关键字在Java类中使用super引用父类的成分。在子类中想调用父类中的那个被覆盖的方法,用super.方法(参数列表)的格式。super.成员这种形式多用于子类的成员隐藏了父类的同名成员的情况。用super改写TestOverWrite.java中子类的getInfo()方法

5、例:TestInherit.java,方法的重写,方法的重写,final关键字,final关键字在Java中声明类、属性和方法时,可使用final来修饰。final标记的类不能被继承-最终类。,final class A/ final类/The following class is illegal.class B extends A,final关键字,final关键字final声明的方法不能被子类重写-最终方法。,class Afinal void fm()System.out.println(“This is a final method.”)class B extends Afinal v

6、oid fm()System.out.println(“Error!”),final关键字,final关键字final标记的变量(成员变量或局部变量)即为常量。它的值不能被改变,只能赋值一次。final int a=3;a=4;/出错final标记的变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使用。,class Testfinal int a=3;或者:class Testfinal int a;Test()a=3;,final关键字用public static final共同标记常量时,这个常量就成了全局常量。只能在定义时赋值。final static double PI=3.

7、1415;即使在构造方法里面也不能对其进行赋值。,final关键字,对象的类型转换,对象的类型转换一个父类的引用类型变量可以“指向”其子类的对象。一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用引用变量 instanceof 类名来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作父类的对象来使用称作向上转型(自动转换),反之称为向下转型(强制转换)。,对象类型转型实例I,对象的类型转换,class Animalpublic String name;Animal(String name) this.name = name; class Cat

8、extends Animalpublic String eyesColor;Cat(String n, String c) super(n); eyesColor = c; class Dog extends Animalpublic String furColor;Dog(String n,String c) super(n); furColor = c; ,对象类型转型实例II,对象的类型转换,class Animalpublic String name;Animal(String name) this.name = name; class Cat extends Animalpublic

9、 String eyesColor;Cat(String n, String c) super(n); eyesColor = c; class Dog extends Animalpublic String furColor;Dog(String n,String c) super(n); furColor = c; ,public class Testpublic static void main(String args)Test test = new Test();Animal a = new Animal(“Animalname”);Cat c = new Cat(“catname”,

10、”blue”);Dog d = new Dog(“dogname”,”black”);test.f(a); test.f(c); test.f(d);public void f(Animal a)System.out.println(“name: ”+a.name);if(a instanceof Cat) Cat cat = (Cat)a; System.out.println(cat.eyesColor+ “eyes”); if(a instanceof Dog) Dog dog = (Dog)a; System.out.println(dog.furColor+ “fur”); ,nam

11、e: Animalnamename: catnameblue eyesname: dognameblack fur,Object类,Object类Object是Java类中的最高层类,所有类的父类。如果在类的声明中未声明extends关键字指明其父类,这个类被系统默认为Object的子类。,public class Person等价于public class Person extends Object,Object类,Object的toString方法定义形式:public String toString()返回该对象的字符串表示。形如:类名代表对象的数字序列在进行String与其它类型数据的

12、连接操作时(如:System.out.println(“info”+obj),将自动调用该对象类的toString()方法。通常情况下,重写toString()方法,返回对象的有用信息。例:TestToString.java,Object类,Object的equals方法定义形式:public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。Object的equals方法定义为:x.equals(y)当x和y是同一个对象的引用时返回true,否则返回false。通常情况下,想要比较对象内容是否相等,需要重写equals方法。例:TestEquals.j

13、ava,Object类,Object的equals方法注意:Object类中的equals方法:和=运算符是相同的,表示Object类中的子类可以使用equals方法,测试两个确定的对象是否含有相同的引用。String类中的equals方法:是从Object类中继承而来的,在String类中修改用来比较两个字符串是否含有相同的内容。例:Equals.java,Object类,Object的clone方法定义形式:protected Object clone() throws CloneNotSupportedException创建并返回此对象的一个副本。语句newObject=someObje

14、ct.clone(); 将someObject对象复制到新的内存地址,并且将新的对象引用赋给newObject。,对象的多态性,对象的多态性,应用程序不必为每一个子类编写功能调用,只需要对父类进行处理即可。“以不变应万变”,大提高程序的可复用性。子类的功能可以被父类的方法或引用变量调用,这叫向后兼容,可以提高程厚的可扩充性和可维护性。以前写的程序可以被后来的程序调用不足为奇,现在写的程序(叫某人来吃饭方法)能调用以后写的程序(如人类的子类中国人类的吃饭方法)就很了不起了。,对象的多态性,动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。动态绑定实现

15、了运行时多态。例:TestPolymoph.java,对象的多态性,面向对象的多态性多态的条件一旦满足,当调用父类里面被重写的方法时,实际new的是哪个子类对象,就调用那个子类的方法。多态性:一个方法可以有多种实现版本,即“一种定义,多种实现”。类的多态性提供类中方法设计的灵活性和执行的多样性。,抽象类,抽象类抽象类:用abstract关键字修饰的类,叫做抽象类。抽象方法:用abstract修饰的方法被称为抽象方法。抽象方法只需声明,没有方法体。抽象类定义的规则:含有抽象方法的类必须被声明为抽象类。抽象类不能被实例化。抽象类的子类必须重写所有的抽象方法,否则这个类的子类还是个抽象类。,抽象类,抽象类含有抽象方法的类肯定是抽象类,抽象类中的某个方法不一定是抽象的。抽象类作用:提供一种比普通类更高的抽象,它类似于类的框架,尽管不能创建它的对象但是可以告诉继承它的类,它希望继承者应该包括什么,例如都应该有某种方法,因此使所有的继承者都呈现出一定的共性。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号