java基础(十)——继承

继承

继承后的特点——成员方法

成员方法不重名

  如果子类父类中出现不重名的成员方法,这时的调用是没有【任何影响的】,对象调用方法是,会先在子类中查找有没有对应的方法,若子类中存在该方法,那么就执行该方法,若子类当中不存在子类中的方法,那么会执行父类当中的成员方法。

 1 public class Fu{
 2     int num = 10;
 3     public void show(){
 4         System.out.prontln("Fu类中的show()方法在执行!");
 5         System.out.prontln("Fu类中成员变量num: "+num); 
 6     }
 7 }
 8 public class Zi extends Fu{
 9     int num =20
10     public void show2(){
11         System.out.println("Zi类中的show()方法在执行!")
12         System.out.prontln("Zi类中的成员变量num:"+num)
13     }
14 }
15 public class TestExtends{
16     public static void main(String[] args){
17         //构建子类对象
18         Zi zi = new Zi();
19         zi.show();//调用父类当中的show方法    Fu类中的show()方法在执行! 10
20         zi.show2();//调用子类当中的show2方法     Fu类中的show()方法在执行! 20
21     }
22 }

成员方法重名——重写(Override)

   如果父子类中出现重名的成员方法,这时的访问是一种特殊情况。叫做方法重写(Override)。

  • 方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表),会出现覆盖效果,也称为重写或者复写,简称【声明不变,重新实现】。

  实例代码:

 1 public class Fu{
 2     int num = 10;
 3     public void show(){
 4         System.out.println("Fu show()方法在执行")
 5         System.out.prontln("Fu类中成员变量num: "+num); 
 6     }
 7 }
 8 
 9 public class Zi extends Fu{
10     int num = 20;
11     public void show(){
12         System.out.println("Zi类中的show()方法在执行!")
13         System.out.prontln("Zi类中的成员变量num:"+num)
14     }
15 }
16 
17 public class TestExtendsDemo02{
18     public static void main(String[] args){
19         //构建子类对象
20         Zi zi = new Zi(); 
21         // 调用show()方法
22         //子类中有show()方法,执行的是重写后的show()
23         zi.show();//Zi类中的show()方法在执行! 20
24     }
25 }   

重写的应用

  子类可以根据需要定义特定于自己的行为,既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行功能扩展。

  

 1 public class Phone{
 2     //打电话
 3     public void call(){
 4         System.out.println("打电话!");
 5     }
 6     //发短信
 7     public void sendMessage(){
 8         System.out.println("发短信!");
 9     }
10     //来电显示
11     public void show(){
12         System.out.prinyln("来电显示电话号码!")
13     }
14 }
15 public class IPhone12 extends Phone{
16     //重写父类当中的来电显示功能,并增加自己的显示姓名和显示头像功能
17     public void show(){
18         //父类当中的功能保持不变
19         super.show();
20         //新增新功能
21         System.out.println("显示姓名!")
22         System.out.println("显示头像!")    
23     }
24 }
25 public class TestExtendsDemo03{
26    public static void main(String[] args){
27        //创建一个子类对象
28        Phone12 iphone = new IPhone12();
29        //调用父类当中的打电话
30        iphone.call();
31        //调用重写之后的来电显示功能
32        iphone.show();//显示电话号码    显示姓名    显示头像
33    } 
34 }

  重写:方法的名称一样,参数列表【一样】,返回值类型【也一样】,重写前提是有继承关系;

  重载:方法的名称一样,参数列表【不一样】,返回值类型无要求,在本类中;

  注意事项:

  • 子类方法重写父类方法,必须要保证权限大于等于父类权限
  • 子类方法覆盖父类方法,返回值类型、函数名称和参数列表必须要一模一样。

继承后的特点——构造方法

  构造方法的定义和作用:

  1. 构造方法的名字和类名要保持一致,所以子类是无法继承父类当中的构造方法
  2. 构造方法的作用一般是用来初始化成员变量,所以子类在初始化的过程中,必须先执行父类中的初始化动作。子类的构造方法当中默认有一个super()方法,表示调用的父类的构造方法,父类的成员变量初始化之后,才可以给子类使用。
 1 public class Fu{
 2     private int n;
 3     public Fu(){
 4         System.out.println("Fu()");
 5     }
 6 }
 7 public class Zi extends Fu{
 8     public Zi(){
 9         //super()调用父类中的构造方法 隐式调用
10         System.out.println("Zi()");
11     }
12 }
13 public class TestExtendDemo04{
14     public static void main(String[] args){
15         Zi zi = new zi();
16     }
17 }
18 //输出结果
19 //Fu()
20 //Zi()

super和this

    父类空间优先于子类对象产生

    在每次创建子类对象的时候,先初始化父类空间,再创建子类对象。目的在于子类对象中包含了其对应的父类空间,便可以包含父类的成员,如果父类成员非私有,则子类可以随意使用父类的成员,代码体现在子类的构造方法调用时,会先调用父类的构造方法。

 

super和this介绍

 

posted @ 2020-11-23 22:48  寒江雨  阅读(75)  评论(0编辑  收藏  举报