什么是继承?
- 现实世界中,儿子继承老爹的东西。
- 面向对象世界里,一个类(子类)继承另外一个类(父类)的数据成员和方法。
- Java只支持单继承,一个儿子只有一个爹。而C++支持多继承。
为什么要用继承?
- 面向对象的终极目标就是要减少应用程序中的重复代码,继承也可以减少应用程序中的程序代码
- 便于修改
继承的语法表示是什么?
1.用Son类继承Person类,表示出继承成功
class Person{ Strsing name; int age; public void eat(){ System.out.println("我在吃饭"); } public void introduce(){ System.out.println("你好我的名字: "+name+"我的年龄:"+age); } } class Son extends Person{ //Son 为Person的子类 //Son 内未定义任何方法 } public class test{ public static void main(String[] agrs){ //用Son测试是否继承了Person类。 Son yanggan=new Son(); yanggan.name="yanggan"; yanggan.age=21; yanggan.introduce(); /*输出 你好我的名字: yanggan我的年龄:21 */ } }
生成子类的过程?
class Person{ String name; int age; Person(){ System.out.println("Person 无参构造函数"); } Person(String name,int age){ this.name=name; this.age=age; System.out.println("Person 有参构造函数"); } public void eat(){ System.out.println("我在吃饭"); } public void introduce(){ System.out.println("你好我的名字: "+name+"我的年龄:"+age); } public static void talk(String word){ System.out.println(word); } } //Person的子类 Son class Son extends Person{ String school; //1.子类Son不能继承父类构造函数! //2.在子类的构造函数中,必须调用父类的构造函数!!为什么? /* */ Son(){ super();//3.不写出来,编译器自动添加这行代码 //super表示调用父类的构造函数 System.out.println("Son 无参构造函数"); } Son(String name,int age,String school){ //4.头两行为重复代码,如何解决?--能调用父类构造函数就好了 //this.name=name; //this.age=age; super(name,age);//5.super调用父类的构造函数,又参数决定用哪一个! this.school=school; } } public class test{ public static void main(String[] agrs){ //创建Son的对象 Person.talk("---------new Son()-------------"); Son yanggan=new Son(); Person.talk("----------new Son(有参数)--------"); Son wangtao=new Son("wangtao",21,"HUT"); wangtao.introduce();//6.怎么打印学校呢? } }
父类Private方法的继承问题
1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样?
//1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样? package me.privateandfinal; class Father{ private void eat(){ System.out.println("老爹在吃饭"); } private final void sleep(){ System.out.println("老爹在睡觉"); } } class Son extends Father{ //~ @Override //~ public void eat(){ //~ System.out.println("这算复写老爹的方法"); //~ }//编译错误 /*输出: : method does not override or implement a method from a supertype @Override ^ 1 error *///编译器指出并未发现有复写父类方法,所以void eat()不算复写。即这是一个新方法 private final void sleep(){ System.out.println("儿子在睡觉"); }//还是新方法 } public class TestPrivateandFinal{ public static void main(String[] arga){ Son coco=new Son(); //coco.eat();//对于Son类,这个新方法可以访问,与父类的eat()方法无半毛钱关系 } }
作者:YangGan