前言:学习就是一个动心忍性增益起所不能的过程
本文主要讨论Java的继承性与多态性
https://www.cnblogs.com/xiaozhaoboke/p/11038893.html
接口
通用性、隔离性
面向接口编程:如果使用的功能接口足够满足,则不在乎具体的类而使用接口
public interface Animal{
void eat();
}
组成:
1.抽象方法
2.常量
3.默认方法
4.静态方法
5.私有方法(java9)
抽象方法
1.public abstract
2.public abstract可省略不写
3.只有方法头,没有方法体
实现类
public class ImplementationClass implements Interface{
//覆盖重写所有抽象方法
}
public class Dog implements Animal{
public void eat(){ //需要补上public
System.out.println("eat");
}
}
覆盖重写(Override)抽象方法:
1.将接口中抽象方法抄写过来
2.去掉abstract
3.写上方法体
接口名 引用名=new 实现类名();
引用名.抽象方法名(参数);
Animal sweetie=new Dog();
sweetie.eat();
1.接口隔离:左边是接口类型,只能调用接口中定义好的内容,不能调用实现类特有内容
2.调用接口中抽象方法时,调用右侧实现类的具体方法内容
继承
继承主要解决的问题:共性抽取
子类可以拥有父类的内容,还可以拥有自己特有内容
public class 父类名称{
}
public class 子类名称 extends 父类名称{
}
public class Animal{
public void eat(){
System.out.println("eat");
}
}
public class Dog extends Animal{
int age=20;
}
Dog sweetie=new Dog();
sweetie.eat();
父子类继承关系中,若成员变量重名:
1.直接访问:等号左边是谁,就优先取谁,没有则向上找
2.通过成员方法访问:方法属于谁,优先用谁,没有则向上找
父子类构造方法访问特点:
1.子类构造方法中,默认隐含“super()”调用——先调用父类构造,后执行子类构造
2.super的父类构造调用,必须是子类构造方法的第一个语句且只能调用一个
super关键字用法:
1.在子类成员方法中访问父类成员变量
2.在子类成员方法中访问父类成员方法
3.在子类构造方法中访问父类构造方法
来源:CSDN
作者:root_indigo
链接:https://blog.csdn.net/weixin_40151234/article/details/104825284