• 抽象和继承


    继承

    面向对象的三大特征:封装、继承、多态

    继承是多态的前提,如果没有继承,就没有多态

    继承主要解决的问题是共性抽取

    继承的特点

    • ​ 子类可以拥有父类的”内容“
    • 子类还可以拥有自己专有的内容

    继承的格式

    /*
    在继承关系当中,”子类就是一个父类“,也就是说子类可以当作一个父类看待
    例如父类是员工,子类是讲师。那么”讲师就是一个员工“。
    定义父类的格式://一个普通的类
    	public class 父类名称{
    	//...
    	}
    定义子类的格式:
    	public class 子类名称 extends 父类名称{
    	//...
    	}
    	
    */
    
    //定义父类
    public class Employee{
        public void method("员工类~执行了");
    }
    
    //定义一个员工的子类
    public class Teacher extends Employee{
        
    }
    

    继承中成员变量访问特点

    /*
    在父类的继承关系当中,如果成员变量,则创建子类对象时,访问有两种方式:
    
    直接通过子类对象访问成员变量:
    	等号左边是谁,就有优先用谁,没有向上找。
    间接通过成员方法访问成员变量:
    	该方法属于谁,就优先用谁没有则向上找。
    */
    
    //定义父类
    public class Fu {
    	int fuNum=100;
    	int num=200;
    	public void mthod() {
    		System.out.println(num);
    	}
    }
    
    
    //定义子类
    public class Zi extends Fu {
    	int ziNum=300;
    	int num=400;
    	public void method() {
    		System.out.println(num);
    	}
    }
    
    //创建一个测试类
    public class MainTest {
    	public static void main(String[] args) {
    		//定义一个子类
    		Zi zi=new Zi();
    		System.out.println(zi.fuNum);//100
    		System.out.println(zi.ziNum);//300
    		System.out.println(zi.num);//400
    		zi.method();//400
    		zi.mthod();//200
    	}
    }
    
    

    区分子类方法中重名的三种变量

    /*
    本类的成员变量		直接写成员变量名
    局部成员变量		this.成员变量
    父类成员变量		super.成员变量
    */
    
    //定义父类
    public class Fu {
    	int fuNum=100;
    	int num=200;
    	public void method() {
    		System.out.println(num);
    	}
    }
    
    
    //定义子类
    public class Zi extends Fu {
    	int ziNum=300;
    	int num=400;
    	public void method() {
            int num=500
    		System.out.println(num);//500
            System.out.println(super.num);//200
    		System.out.println(this.num);//400
    	}
    }
    
    //创建一个测试类
    public class MainTest {
    	public static void main(String[] args) {
    		//定义一个子类
    		Zi zi=new Zi();
    		zi.method();
    
    	}
    }
    
    

    继承中成员方法的访问特点

    /*
    在父子类继承关系当中,访问成员变量方法规则:
    	创建对象是谁就优先用谁,如果没有则向上找。
    	
    	注意事项:
    		无论是成员方法还是成员变量,如果没有都是向上找的,绝对不会向下找子类的。
    */
    

    方法的重写

    概念:在继承关系中,方法的名称一样,参数列表也一样。

    重写:(Override):方法的名称一样,参数列表【也一样】。也叫覆盖、重写

    重载:(OverLoad):方法的名称一样,参数列表【不一样】。

    方法的覆盖重写的特点:创建的子类对象,则优先使用子类方法。

    注意事项:(了解)

    • 必须保证父子类之间的名称相同,参数列表也相同。@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
    • 子方法的返回值必须【小于等于】父类方法的返回值范围,小扩展提示:java.long.Object类是所有类的公共最高父类(祖宗类),java.long.String就是Object的子类。zilei
    • 子类方法的权限必须【大于等于】父类方法的权限修饰符,小扩展提示:public>protected>(default)>private,备注:(default)不是关键字default,而是什么都不写,留空。

    super关键字的三种用法

    • 在子类的成员方法中,访问父类的成员变量。
    • 在子类的成员方法中,访问父类的成员方法。
    • 在子类的构造方法中,访问父类的构造方法。

    this关键字的三种用法

    • 在本类的成员方法中,访问本类的成员变量。
    • 在本类的成员方法中,访问本类的另一个成员方法。
    • 在本类的构造方法中,访问本类的另一个构造方法。

    继承相关的重要特征

    java语言是单继承的

    一个类的直接父类只能由唯一一个

    java语言是多继承的

    我有父亲 父亲有爷爷 爷爷还有祖爷爷

    一个类的直接父类是唯一的,但是一个父类可以拥有很多子类。

    抽象

    /*
    抽象方法:就是加上abstract关键字,去掉大括号,直接分号结束。
    抽象类:抽象爱国发所在的类,必须是抽象类才行。在calss之前写上abstract即可
    
    如何使用抽象类喝抽象方法:
    	不能直接创建new抽象类对象。
    	必须用一个子列来继承抽象父类
    	子类必须重写覆盖抽象父类当中所有的抽象方法
    	覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
    	创建子类对象进行使用。
    */
    

    注意事项

    • 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
    • 抽象类中,可以有构造方法,是提供子类创建对象对象时,初始化父类成员使用的。
    • 抽象类中,不一定包含抽象方法,但是含有抽象方法的类必定是抽象类。
    • 抽象类的子类,必须重写抽象父类中的所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
  • 相关阅读:
    2018.4.26 lvm
    2018.4.25 github创建新项目
    2018.4.24 快排查找第K大
    2018.4.24 flask_mail使用
    SpringBoot中使用ES和MongoDB常用API
    设计模式-Template_Method模式
    设计模式-Chain of Responsibility模式
    设计模式-Observer模式
    设计模式-Adapter模式
    设计模式-Strategy模式
  • 原文地址:https://www.cnblogs.com/liu-xin-yang/p/12607621.html
Copyright © 2020-2023  润新知