我的4类对象和接口3813节_第1页
我的4类对象和接口3813节_第2页
我的4类对象和接口3813节_第3页
我的4类对象和接口3813节_第4页
我的4类对象和接口3813节_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大外软件学院继承与多态计算机教研室大外软件学院主要内容 类的继承类的继承 父类子类父类子类 方法的覆盖方法的覆盖 finalfinal关键字关键字 对象的上转型对象的上转型 多态多态 abstractabstract类和方法类和方法 supersuper关键字关键字 接口接口大外软件学院类的继承继承继承是一种由是一种由已有类已有类创建创建新类新类的机制,是面向对象的机制,是面向对象程序设计的核心特点和重要方法。程序设计的核心特点和重要方法。先创建一个具有共有属性的一般类(父类)先创建一个具有共有属性的一般类(父类)再根据一般类创建具有特殊属性的新类,新类继承一般再根据一般类创建具有特殊属性的新

2、类,新类继承一般类的状态和行为,并根据需要增加他自己的新的状态和类的状态和行为,并根据需要增加他自己的新的状态和行为(子类)行为(子类)由继承而得到的类称为子类,被继承的类称为父类由继承而得到的类称为子类,被继承的类称为父类( (超类超类) )JavaJava只支持单一继承,即一个类只能有一个父类只支持单一继承,即一个类只能有一个父类JavaJava支持多层继承支持多层继承大外软件学院子类 在在JavaJava类的声明中,使用关键字类的声明中,使用关键字extendsextends实现继承。实现继承。由已有的父类派生新的子类,格式如下:由已有的父类派生新的子类,格式如下:class class

3、 extends extends 子类类体;子类类体; 例如:例如:注:注:ObjectObject类类是是java.langjava.lang包中的一个类:如果一个类的声包中的一个类:如果一个类的声明中没有使用明中没有使用extendsextends关键字,该类就被系统默认为是关键字,该类就被系统默认为是ObObjectject类的直接子类。类的直接子类。大外软件学院ObjectObject类中常用的方法类中常用的方法 1. public final Class getClass( )2. public boolean equals (Object obj) 3. public String

4、 toString() 4. public int hashCode()大外软件学院【例例】子类继承父类的成员变量子类继承父类的成员变量 源程序Person1.java中定义类Person与Student,程序如下public class Person String name; /姓名姓名 int age; /年龄年龄class Student String name; /姓名姓名 int age; /年龄年龄 String school; /学校学校这样的定义有大量的重复,利这样的定义有大量的重复,利用继承原则,重新定义这两个类用继承原则,重新定义这两个类public class Perso

5、n String name; /姓名姓名 int age; /年龄年龄class Student extends Person String school; /学校学校利用继承原则:子类从父类继承了利用继承原则:子类从父类继承了非私有成员变量非私有成员变量name、age,同时,同时增加了新的成员变量增加了新的成员变量school大外软件学院继承的目的类之间的继承关系是现实世界中遗传关系的直类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性接模拟,它表示类之间的内在联系以及对属性和行为的共享:和行为的共享:子类可以沿用父类的某些特征。子类可以沿用父类的某些特征。子

6、类也可以具有自己独立的属性和操作。子类也可以具有自己独立的属性和操作。通过继承可以更有效地组织程序结构,通过继承可以更有效地组织程序结构,利用已利用已有的类来完成更复杂的新类的设计与开发有的类来完成更复杂的新类的设计与开发,充,充分实现代码重用。分实现代码重用。大外软件学院子类 extendsextends实现实现继承关系继承关系 子类继承父子类继承父类的成员变类的成员变量和方法量和方法 子类是否子类是否可以继承可以继承父类的全父类的全部成员?部成员?大外软件学院子类的继承性(1) 当子类和父类当子类和父类在同一个包在同一个包中,子类继承父类中中,子类继承父类中不是不是privatepriva

7、te修饰的变量和方法修饰的变量和方法 继承的成员变量和方法的访问权限不变。继承的成员变量和方法的访问权限不变。大外软件学院子类的继承性(2) 当子类父类当子类父类不在同一个包不在同一个包中,子类继承父类的中,子类继承父类的受保护受保护(protected)(protected)成员和公有成员和公有(public)(public)成员,成员,不能继承不能继承友好成员友好成员和私有成员和私有成员privateprivate大外软件学院子类的继承性(3) protectedprotected的补充说明:的补充说明: D D类中创建一个类中创建一个D D类的对象,能够访问成员变量类的对象,能够访问成员

8、变量x x和和y y; OtherOther类中创建一个类中创建一个D D类的对象:类的对象: 和和D D类同一个包:能够访问类同一个包:能够访问D D类中定义的受保护的成员类中定义的受保护的成员y y 和和A A类同一个包:能够访问类同一个包:能够访问D D类中继承的受保护的成员类中继承的受保护的成员x xOther D d = new D();同一个包同一个包A protected int xBD protected int yc大外软件学院访问权限练习 要求设计一个类,它拥有一个特殊的成员变量,要求设计一个类,它拥有一个特殊的成员变量,该成员变量必须能够被该类的子类访问到,但是该成员变量

9、必须能够被该类的子类访问到,但是不能被不在同一个包内的其他类访问到。下面哪不能被不在同一个包内的其他类访问到。下面哪个设计可以满足上述要求?个设计可以满足上述要求?A. 用public 修饰该成员变量B. 用private修饰该成员变量C. 用protected修饰该成员变量D. 不需要任何访问权限修饰该成员变量C C大外软件学院访问权限练习 假设在假设在JavaJava源文件源文件MyClass.javaMyClass.java中只包含一中只包含一个类,而且这个类必须能够被位于一个庞大的个类,而且这个类必须能够被位于一个庞大的软件系统中的所有软件系统中的所有JavaJava类访问到,那么下面

10、哪类访问到,那么下面哪些声明有可能符合要求?些声明有可能符合要求?A. private class MyClass extends ObjectB. class Myclass extends ObjectC. public class MyClassD. protected class MyClass E. public class MyClass extends ObjectC,EC,E大外软件学院【例例】 子类继承父类的成员方法子类继承父类的成员方法源程序Person.java中定义类Person与Studentpublic class Person protected String n

11、ame; protected int age; void setdata(String n1,int a1) name = n1; age = a1; public void print() System.out.println(name+, +age); /受保护的数据成员受保护的数据成员 /友好成员方法友好成员方法 /公有成员方法公有成员方法大外软件学院【例例】 子类继承父类的成员方法子类继承父类的成员方法 Student继承父类Person的成员,并增加了自己的成员schoolclass Student extends Person protected String school; pu

12、blic static void main(String args) Person p1 = new Person(); p1.setdata(李大广李大广,21) ; p1.print(); Student s1 = new Student() ; s1.setdata(陈小瑞陈小瑞,19); s1.school=“大外大外; s1.print(); 继承父类数据成员继承父类数据成员age、name成员方法:成员方法:setdata()、print()/调用父类的成员方法调用父类的成员方法/访问本类的成员变量访问本类的成员变量存在两个问题:存在两个问题:1. s1.setdata( )无法为

13、子类的无法为子类的school赋值赋值改进方法是创建构造方法改进方法是创建构造方法2. s1.print()无法输出的无法输出的school的值的值改进方法是重新定义改进方法是重新定义print方法,方法,称之为称之为方法的重写方法的重写大外软件学院成员变量的隐藏和方法的重写(1)class Animal class Animal String lable = String lable = AnimalAnimal ; ; public void cry() public void cry() System.out.println(System.out.println( );); class

14、Dog extends Animal class Dog extends Animal String lable = String lable = DogDog ; ; public void cry() public void cry() System.out.println(System.out.println( 汪汪汪汪 );); class Cat extends Animal class Cat extends Animal String lable = String lable = CatCat ; ; public void cry() public void cry() Sys

15、tem.out.println(System.out.println( 喵喵喵喵 );); 隐藏:隐藏:子类中定义的子类中定义的成员变量和父类中的成员变量和父类中的成员变量重名成员变量重名 重写:重写:子类中定义的子类中定义的方法和父类中方法的方法和父类中方法的名字、返回值类型、名字、返回值类型、形式参数的个数及类形式参数的个数及类型必须完全相同型必须完全相同 重写发生在父子之间重写发生在父子之间大外软件学院成员变量的隐藏和方法的重写(2)class Chengji float f (float x,float y) return x*y; class Xiangjia extends Che

16、ngji float f (float x,float y) return x+y ; public class Example public static void main(String args)Xiangjia sum; sum = new Xiangjia(); float c = sum.f(4,6); System.out.println(c); 10.0大外软件学院成员变量的隐藏和方法的重写(3)class Chengji float f (float x, float y) return x*y; class Xiangjia extends Chengji float f

17、(int x, int y) return (float)(x+y) ; public class Example4_16 public static void main(String args)Xiangjia sum; sum = new Xiangjia();System.out.println(sum.f(4, 6);System.out.println(sum.f(4.0f, 6.0f); 若父类与子类同若父类与子类同名方法的形参不名方法的形参不同,则视为重载同,则视为重载10.024.0大外软件学院成员变量的隐藏和方法的重写(4)class Chengji float f (flo

18、at x,float y) return x*y; class Xiangjia extends Chengji int f (float x,float y) return (int)(x+y) ; public class Example4_16 public class Example4_16 public static void main(String args) public static void main(String args)Xiangjia sum;Xiangjia sum; sum = new Xiangjia();sum = new Xiangjia();System.

19、out.println(System.out.println(sum.f(4, 6)sum.f(4, 6); );System.out.println(System.out.println(sum.f(4.0f, 6.0f)sum.f(4.0f, 6.0f); ); 编译错误!编译错误!若父类与子类同若父类与子类同名方法的形参相名方法的形参相同,而返回类型同,而返回类型不同,编译出错不同,编译出错大外软件学院成员变量的隐藏和方法的重写(5) 重写父类的方法时,不能降低方法的访问权限重写父类的方法时,不能降低方法的访问权限合法合法非法非法大外软件学院成员变量的隐藏和方法的重写(6) 子类的实例方

20、法不能重写父类的静态方法子类的实例方法不能重写父类的静态方法合法合法非法非法大外软件学院成员变量的隐藏和方法的重写(7) 子类的静态方法不能重写父类的实例方法子类的静态方法不能重写父类的实例方法合法合法非法非法大外软件学院小结:子类的三种成员:子类的三种成员:继承父类的成员变量和成员方法;继承父类的成员变量和成员方法;增加新的成员变量和成员方法;增加新的成员变量和成员方法;隐藏父类的成员变量,重写(或重载)父隐藏父类的成员变量,重写(或重载)父类的成员方法类的成员方法大外软件学院课堂练习class Apublic int getNumber(int a)return a+1;class B e

21、xtends Apublic int getNumber(int a)return a + 2;public static void main(String args)B b = new B();System.out.println(b.getNumber(0);编译成功并输出编译成功并输出2 2大外软件学院课堂练习class Apublic int getNumber(int a)return a+1;class B extends Apublic int getNumber(int a, char c)return a + 2;public static void main(String

22、args)B b = new B();System.out.println(b.getNumber(0);编译成功并输出编译成功并输出1 1大外软件学院课堂练习class A public int getNumber()return 1;class B extends Apublic short getNumber()return 2; public static void main(String args)B b = new B();System.out.println(b.getNumber();编译第编译第8 8行出现行出现语法错误语法错误大外软件学院课堂练习class BaseClas

23、sprivate float x = 1.0f;protected float getVar()return x;class SubClass extends BaseClassprivate float x = 2.0f;/此处插入代码下面哪些方法是对父类方法的有效覆盖(或重写)?A. float getVar()return x;B. public float getVar()return x;C. double getVar()return x;D. protected float getVar()return x + 1;E. public float getVar(float f)r

24、eturn f;B,D大外软件学院final关键字 finalfinal修饰的变量是常量,必须赋初值,而且不能再修改修饰的变量是常量,必须赋初值,而且不能再修改 finalfinal修饰的方法不能被重写修饰的方法不能被重写class class CircleCircle final double PI; final double PI; /非法非法 final double PI = 3.1415926;final double PI = 3.1415926; public double getArea(final double r) public double getArea(final d

25、ouble r) r r 9 9; /非法非法 return PIreturn PI* *r r* *r;r; public class Example4_18 public class Example4_18 public static void main(String args) public static void main(String args) Circle a = new Circle();Circle a = new Circle(); System.out.println( System.out.println(面面积积: + a.getArea(10); + a.getAr

26、ea(10); 大外软件学院final关键字 finalfinal修饰的类不能被继承修饰的类不能被继承 出于安全考虑,某些类不能轻易被继承或修改,因此必须定义出于安全考虑,某些类不能轻易被继承或修改,因此必须定义为为fianlfianl类,例如:类,例如:StringString类类大外软件学院final课堂练习 下面哪些方法能够防止被重写下面哪些方法能够防止被重写( (覆盖覆盖) )? A. final void methoda()A. final void methoda() B. void final methoda()B. void final methoda() C. static

27、void mehtoda()C. static void mehtoda() D. static final void methoda()D. static final void methoda()A,D大外软件学院super关键字 如果在子类中子类中想使用被子类隐藏的成员变量或重写的成员方法可以使用关键字superExample4_24.java大外软件学院super关键字 子类没有继承父类的构造方法。子类没有继承父类的构造方法。 子类若想调用父类的构造方法:子类若想调用父类的构造方法: 必须在子类的构造方法中使用必须在子类的构造方法中使用 必须使用必须使用supersuper关键字表示:关

28、键字表示:super(super(参数列表参数列表) ) supersuper必须是子类构造方法的头一条语句必须是子类构造方法的头一条语句 若子类构造方法没有使用若子类构造方法没有使用supersuper语句:系统在子语句:系统在子类构造方法的第一句,默认添加了一个类构造方法的第一句,默认添加了一个super();super(); 为避免出错,当父类中定义多个构造方法时,为避免出错,当父类中定义多个构造方法时,其中应当包含一个不带参数的构造方法其中应当包含一个不带参数的构造方法Example4_23.java大外软件学院课堂练习class Father Father()System.out.p

29、rintln( Father );class Son extends Father Son()super();System.out.println( Son );public class J_Testpublic static void main(String args)new Father();new Son();FatherFatherSon大外软件学院课堂练习class FatherFather()System.out.println( Father );class Son extends Fathervoid Son()System.out.println( Son );Son()su

30、per();public class J_Testpublic static void main(String args)new Father();new Son();FatherFather大外软件学院/父类定义带参构造方法父类定义带参构造方法/方法覆盖方法覆盖【例例】 子类构造方法的定义子类构造方法的定义/隐式地调用父类的无参构造方法隐式地调用父类的无参构造方法u说明:说明:由于超类由于超类AnimalAnimal已显式定义了带参数的已显式定义了带参数的 构造方法,构造方法,JavaJava运行时系统不会再自动运行时系统不会再自动 生成默认的无参数构造方法;生成默认的无参数构造方法;子类构

31、造方法又隐式调用父类的无参数子类构造方法又隐式调用父类的无参数 构造方法,构造方法,编译时会出错编译时会出错;问题在于超类没有可供子类构造方法问题在于超类没有可供子类构造方法 调用的无参数构造方法调用的无参数构造方法 Animal()Animal()大外软件学院/父类定义带参构造方法父类定义带参构造方法/显式地调用显式地调用父父类的构造方法类的构造方法【例例】 子类构造方法的定义子类构造方法的定义1 1、修改说明:、修改说明:在子类构造方法第一条语句显式在子类构造方法第一条语句显式加上对父类构造方法的调用加上对父类构造方法的调用大外软件学院/注释掉注释掉超类定义带参构造方法超类定义带参构造方法

32、/隐式地调用超类的无参构造方法隐式地调用超类的无参构造方法【例例】 子类构造方法的定义子类构造方法的定义2 2、修改说明、修改说明:在父类在父类AnimalAnimal中去掉带参构造中去掉带参构造方法的定义,这时方法的定义,这时系统会自动系统会自动生成生成无参数的构造方法;无参数的构造方法; 大外软件学院/超类定义带参构造方法超类定义带参构造方法/隐式地调用超类的无参构造方法隐式地调用超类的无参构造方法/方法覆盖方法覆盖【例例】 子类构造方法的定义子类构造方法的定义3 3、修改说明:、修改说明:在超类添加一个无参的构造方法在超类添加一个无参的构造方法, , 程序体为空程序体为空大外软件学院课堂

33、练习class Test extends TTpublic Test()this(Tom);public Test(String s)super(s);System.out.println(How do you do?);public static void main(String args) Test t = new Test(“Jerry);class TT public TT() System.out.println(“Hello!); public TT(String s) this(); System.out.println(I am +s); Hello!I am JerryHow

34、 do you do?大外软件学院课堂练习添加哪句可以使实例引用添加哪句可以使实例引用a a访问访问J_BaseJ_Base的的mb_method()mb_method()方法?方法?class J_Basepublic void mb_method()System.out.println(Base);class J_SubClass extends J_Basepublic void mb_method()System.out.println(Sub);public class J_Testpublic static void main(String args)J_SubClass a =

35、new J_SubClass();/添加语句处(A) a. mb_method(); (B) a.super.mb_method(); (C) a.super.super.mb_method(); (D)以上都不对D大外软件学院对象的上转型对象 如果如果动物动物(Animal)(Animal)是是老虎老虎(Tiger)(Tiger)的父类,则我们的父类,则我们可以说可以说“老虎是动物老虎是动物”,但不能说,但不能说“动物是老动物是老虎虎”; 当说当说“老虎是动物老虎是动物”时,老虎将失去其所独有的时,老虎将失去其所独有的属性和功能;属性和功能; 如果如果人人(Person)(Person)是是

36、学生学生(Student)(Student)的父类,则我们的父类,则我们可以说可以说“学生是人学生是人”,但不能说,但不能说“人是学生人是学生”; 当说当说“学生是人学生是人”时,学生将失去其所独有的属时,学生将失去其所独有的属性和功能;性和功能; 结论:子类的对象也是父类的对象,反之不成立结论:子类的对象也是父类的对象,反之不成立 上转型:上转型:将子类对象的引用赋值给父类的对象将子类对象的引用赋值给父类的对象有机物为食有机物为食, ,能感觉能感觉, ,有神经有神经, ,可运动可运动有姓名、年龄和性别,有姓名、年龄和性别,能吃饭,睡觉和思考能吃饭,睡觉和思考大外软件学院对象的上转型对象 上转

37、型:传给父类对象一个子类对象上转型:传给父类对象一个子类对象AnimalTigerAnimal a;a = new Tiger();Animal a;Tiger t = new Tiger();a = t;称称a a是子类对象是子类对象t t的上转型对象的上转型对象对象新增的变量新增的方法继承的变量继承的方法对象的上转型对象赋值给赋值给父类对象父类对象隐藏前隐藏前重写后重写后大外软件学院对象的上转型对象(2)class class 类人猿 private int n=100; private int n=100;int age = 10;int age = 10; void crySpeak(

38、String s) void crySpeak(String s) System.out.println(s); System.out.println(s); void sleep() void sleep() System.out.println( System.out.println(呼呼呼呼); ); class People extends class People extends 类人猿 String name = String name = 张三张三; int age = 18; int age = 18; void crySpeak(String s) void crySpeak

39、(String s) System.out.println( System.out.println(* *+s+s+* *); ); void computer(int a,int b) void computer(int a,int b) System.out.println(a System.out.println(a* *b); b); class Example4_19 class Example4_19 public static void main(String args) public static void main(String args) 类人猿类人猿 monkey1 =

40、new monkey1 = new 类人猿类人猿();();/父类创建的对象父类创建的对象People p1 = new People();People p1 = new People();/子类创建的对象子类创建的对象类人猿 monkey2monkey2 = p1; = p1; /子类的上转型对象子类的上转型对象 大外软件学院对象的上转型对象(2) 父类创建的对象与子类上转型对象之间的区别父类创建的对象与子类上转型对象之间的区别 父类创建的对象和子类上转型对象具有相同的成员变量父类创建的对象和子类上转型对象具有相同的成员变量 如果某方法在子类中被重写,则子类上转型对象的该方法如果某方法在子类

41、中被重写,则子类上转型对象的该方法是重写后的方法,这是父类创建的对象和子类上转型对象是重写后的方法,这是父类创建的对象和子类上转型对象之间唯一的差别之间唯一的差别 monkey1(monkey1(父类创建的对象父类创建的对象) ) 成员变量:成员变量: int n;(int n;(私有私有) ) int age;int age; 成员方法:成员方法: crySpeak(String s);crySpeak(String s); sleep();sleep(); monkey2(monkey2(子类上转型对象子类上转型对象) ) 成员变量:成员变量: int n;int n;(私有)(私有) i

42、nt age;int age; 成员方法:成员方法: crySpeak(String s);crySpeak(String s); sleep();sleep();class class 类人猿 private int n=100; private int n=100;int age = 10;int age = 10; void crySpeak(String s) void crySpeak(String s) System.out.println(s); System.out.println(s); void sleep() void sleep() System.out.println

43、( System.out.println(呼呼呼呼); ); class People extends class People extends 类人猿 String name = String name = 张三张三; int age = 18; int age = 18; void crySpeak(String s) void crySpeak(String s) System.out.println( System.out.println(* *+s+s+* *); ); void computer(int a,int b) void computer(int a,int b) Sys

44、tem.out.println(a System.out.println(a* *b); b); p1(p1(子类创建的对象子类创建的对象) ) 成员变量:成员变量: String name;String name; int age;int age; 成员方法:成员方法: crySpeak(String s);crySpeak(String s); sleep();sleep(); computer(int a,int b);computer(int a,int b);大外软件学院对象的上转型对象(2)class class 类人猿 private int n=100; private int

45、 n=100;int age = 10;int age = 10; void crySpeak(String s) void crySpeak(String s) System.out.println(s); System.out.println(s); void sleep() void sleep() System.out.println( System.out.println(呼呼呼呼); ); class Example4_19 class Example4_19 public static void main(String args) public static void main(

46、String args) People p1 = new People();People p1 = new People();类人猿 monkey2monkey2 = p1; = p1;monkey2monkey2.age = 12;.age = 12;/从从1010到到1212 monkey2.monkey2.crySpeak(Hello); crySpeak(Hello); /带带* *monkey2.monkey2.sleep();sleep(); People p2 = (People)People p2 = (People)monkey2monkey2; ; puter(10,10)

47、;puter(10,10); monkey2.n = 100; = “李四;puter(10,10)class People extends class People extends 类人猿 String name = String name = 张三张三; int age = 18; int age = 18; void crySpeak(String s) void crySpeak(String s) System.out.println( System.out.println(* *+s+s+* *); ); void computer(int a,int b)

48、 void computer(int a,int b) System.out.println(a System.out.println(a* *b); b); 大外软件学院对象的上转型对象(2) 可以将对象的上转型对象再强制转换为子类对象,可以将对象的上转型对象再强制转换为子类对象,此时该对象又具备子类的所有属性和方法。此时该对象又具备子类的所有属性和方法。 People p1 = new People();People p1 = new People(); 类人猿类人猿 monkey = p1; monkey = p1; People p2 = (People)monkey;People p

49、2 = (People)monkey; / /下转型下转型 对象可以向下转型而不出错的充要条件是:该对象对象可以向下转型而不出错的充要条件是:该对象是由向上转型而来的是由向上转型而来的( (不能将父类创建的对象赋值不能将父类创建的对象赋值给子类对象给子类对象) ) 类人猿类人猿 monkey = new monkey = new 类人猿类人猿();(); People p2 = monkey;People p2 = monkey;/下转型非法,编译时出错下转型非法,编译时出错 People p2 = (People)monkey;People p2 = (People)monkey;/非法,运

50、行时出错非法,运行时出错= new People();= new People();大外软件学院对象的上转型对象(3)class InstrumentString label=instrument;public void play()System.out.println(Instrument.play();public void play2()System.out.println(Instrument.play2();class Wind extends Instrument String label = wind; public void play() System.out.println(

51、Wind.play(); public void play3()System.out.println(Wind.play3(); public class Music public static void main(String args) Wind w = new Wind(); Instrument i = w; i.play();/重写后的方法重写后的方法 i.play2();/继承的方法继承的方法 System.out.println(i.label); 隐藏前的父类成员变量隐藏前的父类成员变量大外软件学院对象的上转型对象(3)class Instrumentprivate Strin

52、g label=instrument;public void play()System.out.println(Instrument.play();private void play2()System.out.println(Instrument.play2();class Wind extends Instrument String label = wind; public void play() System.out.println(Wind.play(); public void play3()System.out.println(Wind.play3(); public class M

53、usic public static void main(String args) Wind w = new Wind(); Instrument i = w; i.play();/重写后的方法重写后的方法 i.play2();/非法非法 System.out.println(i.label); 非法非法大外软件学院课堂练习class J_SuperClassclass J_SubClass extends J_SuperClasspublic class J_Testpublic static void main(String args)J_SuperClass a = new J_Supe

54、rClass();J_SubClass b = new J_SubClass();a = b;(A)(A)无法编译无法编译 (B)(B)可以编译,但是运行出错可以编译,但是运行出错 (C)(C)可以编译,可以运行可以编译,可以运行C大外软件学院课堂练习class J_SuperClassclass J_SubClass extends J_SuperClasspublic class J_Testpublic static void main(String args)J_SuperClass a = new J_SuperClass();J_SubClass b = new J_SubClas

55、s();b = a;(A)无法编译 (B)可以编译,但是运行出错 (C) 可以编译,可以运行A大外软件学院课堂练习class J_SuperClassclass J_SubClass extends J_SuperClasspublic class J_Testpublic static void main(String args)J_SuperClass a = new J_SuperClass();J_SubClass b = new J_SubClass();b = (J_SubClass)a;(A)(A)无法编译无法编译 (B)(B)可以编译,但是运行出错可以编译,但是运行出错 (C)

56、(C)可以编译,可以运行可以编译,可以运行B大外软件学院课堂练习class J_SuperClassclass J_SubClass extends J_SuperClasspublic class J_Testpublic static void main(String args)J_SuperClass a = new J_SubClass();J_SubClass b = new J_SubClass();b = (J_SubClass)a;(A)(A)无法编译无法编译 (B)(B)可以编译,但是运行出错可以编译,但是运行出错 (C)(C)可以编译,可以运行可以编译,可以运行C大外软件学

57、院课堂练习添加哪一个会导致程序输出添加哪一个会导致程序输出“sub”sub”class J_Base class J_SubClass extends J_Basepublic String mb_getString()return Sub;class J_Test extends J_Basepublic static void main(String args)J_Base app = new J_SubClass();System.out.println(_ _);(A) app.mb_getString()(B) (J_Base)app.mb_getString()(C) (J_Sub

58、Class)app.mb_getString() (D) (J_SubClass)app).mb_getString() D大外软件学院课堂练习下面程序输出结果:下面程序输出结果:class J_Base class J_SubClass extends J_Basepublic String mb_getString()return Sub;class J_Test extends J_Basepublic static void main(String args)J_SubClass app = (J_SubClass)new J_Base();System.out.println( ap

59、p.mb_getString() );运行报错运行报错大外软件学院多态 定义:定义:程序中多个名字相同的方法共存的现象,程序中多个名字相同的方法共存的现象,多态是面向对象程序设计的核心特性;多态是面向对象程序设计的核心特性; 优点:优点:提提高了程序的抽象性,突出高了程序的抽象性,突出JavaJava语言的继语言的继承性承性 分类:分类: 重载:重载:一个类中存在多个同名方法一个类中存在多个同名方法 方法名字相同,形式参数方法名字相同,形式参数( (类型或个数类型或个数) )不同不同 与返回值类型是否相同没关系与返回值类型是否相同没关系 重写:重写:子类覆盖父类的同名方法子类覆盖父类的同名方法

60、 返回值类型、方法名字和形式参数必须全都相同返回值类型、方法名字和形式参数必须全都相同大外软件学院多态(方法的重载)class Computeclass Compute void add( ) void add( ) System.out.println(No parameters); System.out.println(No parameters); void add(int a, int b) void add(int a, int b) int result = a + b; int result = a + b; System.out.println(Int: + result);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论