我们在学习的过程中肯定会遇到很多的问题,比如我刚开始学多态的时候,遇到的问题,就是,多态是什么,但后面我学会后,卡在了一个地方,那就是多态到底该怎么使用呢,可能大部分人都会有这种问题,感觉多态其实和继承差不多的,用多态我为什么不用继承呢,还有多态的上下转型到底有什么用啊,之类的问题,我们今天来看一下这些问题。
继承:将某类事物中公共的属性及方法抽离出来,以简化代码
方法重写:在继承或实现关系中,方法名相同,参数列表相同,返回值类型相同,子类中的权限要大于或等于父类中的权限
为什么需要重写呢?
父类提供的功能,但是子类有自己的特殊实现形式,此时就可以重写,例如:人都会吃饭
抽象类:抽象的不具体的
为什么要由抽象类存在?
1、普通类中不能多继承,因为会出现调用不明确的问题
2、当所有的子类都有自己的特殊实现时,父类中方法的方法体就没有存在的意义
接口
1、父类中的方法体没有实际意义时,父类中的方法仍然需要存在,在接口存在的意义就是作为规则
2、扩展
3、耦合性低
这相当于在继承的概念上又加了一层概念,在抽象的关系上又多了一层概念,到接口,接口和继承是很相似的,所以我我们又回到了继承上面,相当于是一个轮回
多态的使用场景
需要 描述多个子类的时候,多个子类有公共的方法.
多态 必须要有继承或实现的关系
父类数据类型 变量名 = new 数据类型(); //有继承关系
数据类型 变量名 = new 数据类型();//单个的类
User user = new User();
User user2 = new User();
user = user2;
int count = 1;//当需要对某一个对象进行多次使用的时候才需要定义变量接收
上述的两个语法,其实可以不要前面的变量定义 1 1
疑问:为什么可以使用不同的类型接收
变量的存在是接收了某个具体的对象,也可以指代其他的同类型的对象
疑问:什么时候会用到多态
public void method(三 小三){
小三是个好孩子,听话,懂事
}
public void method(绿 小绿){
小绿是个好孩子,听话,懂事
}
//方法存在的意义时用来描述老张家的孩子的,之所以传了一个参数的类型是老张,因为老张家有多个孩子,为了方便描述
//实际要去描述的仍然是老张家的孩子
public void method(张 老张){ //张 老张 = 小三
老张家的孩子是个好孩子,听话,懂事
}
这个呢,是我写的一个多态的案例,告诉大家为什么要用多态,多态是什么,有什么作用
向上转型和向下转型:
向上转型是为了统一描述,向上转型只能调用公共方法,向下转型就是从父类转为某一个子类,调用子类里的方法
向上转型是自动进行的,也称隐式转换
向下是强制转换,称显式转换
子父类调用的时候不明白
普通方法编译的时候看的是父类里的方法,执行的时候看的是子类的方法
静态方法编译的时候看的是父类里的方法,执行的时候看的是父类的方法
公共的属性是一样的
这些呢,是我总结出来的一些方法和概念,大家可以看一看,因为接触的还不多,后面我可能还会继续的补充。