继承:是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。(引用自百度百科)
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
1 /* 2 子父类出现后,类成员的特点: 3 4 类中的成员: 5 1,变量: 6 如果子类中出现父类中非私有的同名变量时,子类访问本类中的变量用this,子类访问父类中的同名变量用super; 7 2,函数: 8 当子类出现和父类一样的函数名时,运行子类对象会执行子类的函数,这样如同函数被复写了一样。 9 这就是函数的另一个特性:复写(覆盖) 10 子类继承父类,沿袭了父类的功能,子类具备该功能,但功能内容不一致时,没必要重新定义功能,可以复写父类中的功能。 11 12 复写: 13 1,子类覆写父类,必须保证子类权限大于等于父类权限,才可以复写。 14 2,静态只能覆盖静态; 15 16 重写和重载的区别: 17 重载:只看同名函数的参数列表 18 重写:子父类方法要一模一样 19 3,构造函数: 20 在子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句:super(); 21 super()会访问父类空参数的构造函数,而且子类中所有的构造函数第一行默认都是super(); 22 当父类中没有使用空参数的构造函数时或者要访问父类中指定的构造函数时,子类构造函数中的super()就不能隐藏了,必须写上。 23 */ 24 25 26 class Father 27 { 28 int num = 4; 29 void overWriter() 30 { 31 System.out.println("I'm Father!"); 32 } 33 Father() 34 { 35 System.out.println("Father constructer!"); 36 } 37 Father(int x) 38 { 39 System.out.println("Father constructer with !" + x); 40 } 41 } 42 43 class Son extends Father 44 { 45 int num = 5; 46 void show() 47 { 48 System.out.println(super.num); 49 } 50 void overWriter() 51 { 52 System.out.println("I'm Son!"); 53 } 54 Son() 55 { 56 //super();隐藏了这个 57 System.out.println("Son constructer!"); 58 } 59 Son(int x) 60 { 61 //super();隐藏了这个 62 System.out.println("Son constructer with !" + x); 63 } 64 } 65 66 class ExtendsDemo 67 { 68 public static void main(String[] args) 69 { 70 Son s = new Son(); 71 s.show(); 72 s.overWriter(); 73 Son s1 = new Son(26); 74 } 75 }