day11_extends_Override

  • 面向对象的三大特征---继承

继承

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

成员方法不重名

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

public class Fu{
    int num;
	public void show(){
        System.out.println("Fu类中的show方法在执行!");
        System.out.println("Fu类中的成员变量num:"+num);
    }
}
public class Zi extends Fu{
    int num;
    public void show2(){
        System.out.println("Zi类中的show方法在执行!");
        System.out.println("Zi类中的成员变量num:"+num);
    }
}

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

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

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

public class Fu{
    int num = 10;
	public void show(){
        System.out.println("Fu类中的show方法在执行!");
        System.out.println("Fu类中的成员变量num:"+num);
    }
}
public class Zi extends Fu{
    int num = 20;
    public void show(){
        System.out.println("Zi类中的show方法在执行!");
        System.out.println("Zi类中的成员变量num:"+num);
    }
}

重写的应用

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

设计原则:对于已经投入使用的类,尽量不要修改,推荐定义一个新的类,通过继承,来重复利用共性的内容,并且还可以添加新的内容

public class Phone{
    //打电话功能
	public void call(){
        System.out.println("打电话");
	}
    //发短信功能
    public void sendMessage(){
        System.out.println("发短信");
	}
    //来电显示功能
    public void show(){
        System.out.println("来电显示");
	}
}I
public class Iphone12 extends Phone{
    //重写父类来电显示功能
    public void show(){
        //父类功能保持不变
        super.show();
        //增加新的功能
        System.out.println("姓名显示");
        System.out.println("头像显示");
	}
}
  • 重写:方法名称一样、参数列表一样、返回值类型一样,前提有继承关系
  • 重载:方法名称一样、参数列表不一样、返回值类型无要求,在本类中

注意事项:

  • ​ 子类方法重写父类方法,必须保证权限>=父类权限
  • ​ 子类方法覆盖父类方法,返回值类型、方法名称、参数列表必须一模一样

继承后的特点---构造方法:

​ 构造方法的名字和类名必须一致,所以子类无法继承父类中的构造方法

​ 构造方法的作用一般是用来初始化成员变量,所以子类在初始化的过程中,必须先执行父类中的初始化动作。子类当作的构造方法当中,默认有一个super( );表示调用父类的构造方法,父类的成员变量初始化之后,才可以给子类使用。

public class Fu{
	private int n;
	public Fu(){
		System.out.println("Fu");
	}
}
public class Zi extends Fu{
    
	public Zi(){
		//super()隐式调用
		System.out.println("Zi");
	}
}
//输出    Fu
//		 Zi

super和this关键字:

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

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

posted @ 2020-11-24 22:49  随风十万里  阅读(66)  评论(0编辑  收藏  举报