面向对象三大特性之继承

继承是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、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

有抽象方法的类一定是一个抽象类

 

posted @ 2018-07-21 17:45  文昭  阅读(132)  评论(0编辑  收藏  举报