java基础第九天



多态: 一种事物的多种形态  

例如:
H2O


冰,雪
水,雾,雨
水蒸气 


动物







多态的前提: 
1.类与类有继承关系 
2.方法重写 
3.父类引用指向子类对象 


多态成员的运行特点
1.成员变量 
编译看左边,运行看左边 
2.成员方法 
编译看左边,运行看右边(子类)
3.静态方法 
编译看左边,运行看左边(静态方法,是跟这类走的)
4.构造方法

编译看左边,运行看左边(没有重写,涉及不到多态)

转型的问题:
向上转型:
默认,从子类-->父类 
父类引用指向子类对象 




向下转型 
强制,从父类-->子类
格式:
子类 变量名 = (子类类型)父类 变量名; 
IronMan im = (IronMan) p;
( 参考基本数据类型强转    byte b = (byte)300))


好处: 转型之前,父类 p 并不能使用子类的特有功能
 转型之后,父类就可以使用子类的功能.

抽象类:你没有办法具体描述的类,比如 动物,水果 ,工具 ,蔬菜 , 情感....  
修饰类和方法 




格式:
类: abstract class 类名 { }
方法: public abstract  void eat();
注意:抽象方法是没有方法体
抽象类中可以没有抽象方法 ,但是如果有抽象方法,那么此类必然为抽象类 


eat(){
syso
}


特点:
1.抽象类中,有构造方法,但是不能直接new,所以构造方法是抽象类的子类用的
2.实例化只能实例它的子类,那么就使用到多态 

3.子类的要求:
1.抽象子类才能继承 抽象类 
2.子类想要继承抽象,必须重写抽象类中所有的抽象方法 


成员特点:
1.成员变量: 变量 , 常量 
2.构造方法: 有,但是抽象类用不到
3.成员方法: 抽象 ,非抽象


成员方法的特征:
1.抽象方法:子类必须重写 
2.非抽象: 子类直接用 

abstract 不能和哪些关键字共存?



private    冲突 -- 对子类隐藏,而 abstract 必须让子类重写 
final      冲突 -- 不能被重写,矛盾 
static     无意义-- 类名调用,没有方法体,无意义
  


         
接口: 本质就是一种规则 


作用: 就是扩展类功能 


格式:
interface 接口名{}
相当于定义了规则 
*接口中可以写方法,但是必须是抽象的. 


使用:
class 类名  implements 接口名{}
相当于给类扩展了接口的功能,需要重写接口的所有抽象方法 


注意:
1.接口是不能实例化
创建实现了接口的类的对象,该对象也叫做这个接口的子类
2.类可以实现多个接口




抽象类 接口


成员变量  常量 和变量 常量(public static final)
构造方法  有 没有
成员方法  抽象 非抽象 抽象(public abstract)


类与类 :继承 

单继承 
多层继承 


问题:为什么不能多继承,多个类中有重名方法? 
A {
show(){ a}
}


B {
show(){ b}
}


类和接口:实现 
单实现
多实现
问题:为什么多实现? 如果多个接口中,有重名方法怎么办?  
没关系 , 接口中方法都是抽象的.




接口和接口 
继承 ,而且多继承 


interface A extends interface B {

}
class  C implements A{ 
实现 A 和 B 所有抽象方法 
}




C:设计理念区别
抽象类
被继承体现的是:"is a"的关系。 抽象类中定义的是该继承体系的共性功能。
接口
被实现体现的是:"like a"的关系。天马像马,小飞象像大象.
接口中定义的是该继承体系的扩展功能。
:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值