面向对象三大特性之继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,
或子类从父类继承方法,使得子类具有父类相同的行为。
格式:
class 子类 extends 父类 {}
在子类中,访问父类中的成员变量格式:
super.父类中的成员变量
例:
1 class Fu 2 { 3 //Fu中的成员变量。 4 int num = 5; 5 } 6 class Zi extends Fu 7 { 8 //Zi中的成员变量 9 int num = 6; 10 void show() 11 { 12 //子父类中出现了同名的成员变量时 13 //在子类中需要访问父类中非私有成员变量时,需要使用super关键字 14 //访问父类中的num 15 System.out.println("Fu num="+super.num); 16 //访问子类中的num2 17 System.out.println("Zi num2="+this.num); 18 } 19 } 20 class Demo5 21 { 22 public static void main(String[] args) 23 { 24 Zi z = new Zi(); //创建子类对象 25 z.show(); //调用子类中的show方法 26 } 27 }
继承的特性
-
子类拥有父类非private的属性,方法。
-
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
-
子类可以用自己的方式实现父类的方法。
-
Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
-
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)
继承关键字
继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object祖先类。
1.extends
extends 有“扩展”的意思:子类是父类的扩展
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
1 class parent { 2 3 public parent(){ 4 5 System.out.println("调用父类的构造方法"); 6 7 } 8 9 } 10 11 12 13 class subparent extends parent{ 14 15 public subparent(){ 16 17 System.out.println("调用子类subparent()的构造方法"); 18 19 } 20 21 } 22 23 public class Son extends subparent{ 24 25 public Son() 26 27 { 28 29 System.out.println("调用子类son的构造方法"); 30 31 } 32 33 public static void main(String[] args) 34 35 { 36 37 Son k = new Son(); 38 39 } 40 41 }
继承-子父类中成员方法特点-重写&应用
l 成员方法特殊情况——覆盖
子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。
1 class Fu{ 2 public void show(){ 3 System.out.println("Fu类中的show方法执行"); 4 } 5 } 6 class Zi extends Fu{ 7 public void show2(){ 8 System.out.println("Zi类中的show2方法执行"); 9 } 10 } 11 public class Test{ 12 public static void main(String[] args) { 13 Zi z = new Zi(); 14 z.show(); //子类中没有show方法,但是可以找到父类方法去执行 15 z.show2(); 16 } 17 }
1 class Fu 2 { 3 public void show() 4 { 5 System.out.println("Fu show"); 6 } 7 } 8 class Zi extends Fu 9 { 10 //子类复写了父类的show方法 11 public void show() 12 { 13 System.out.println("Zi show"); 14 } 15 }
l 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
private protected default public
抽象类
当定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。
抽象类定义的格式:
1 abstract class 类名 { 2 }
抽象类的特点:
1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
有抽象方法的类一定是一个抽象类