多态:
多态,就是多种形态。多态又分引用多态,方法多态。
1.引用多态:父类的引用指向本类的对象。
父类的引用指向子类的对象。(子类的引用不能指向父类的对象!)
2.方法多态:创建本类对象时,调用的方法为本类方法。
创建子类对象时,调用的方法为子类重写的方法或继承的方法。
多态的应用的时候很多涉及到引用类型转换!
类型转换也分为两种:隐式类型转换(小类型的转成大类型的)
强制类型转换(大类型的转成小类型的)
由于强制类型装换有
数据溢出的风险,所以我们通常可以用
instenceof关键字来加以判断!
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog = new Dog();
Animal animal = dog;
if(animal instanceof Dog) {
Dog dog2 = (Dog)animal;
}else {
System.out.println("无法进行转换成Dog类型!");
}
if(animal instanceof Cat) {
Cat cat = (Cat)animal;
}else {
System.out.println("无法进行类型转换成Cat类型!");
}
}
}
无法进行类型转换成Cat类型!
JAVA中的抽象类
1.语法定义:
抽象类前使用
abstrauct关键字修饰,则该类为抽象类。
2.抽象类使用场景:
a. 抽象类要约束子类应该有哪些方法,而并不关注子类去如何实现。
b.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免子类设计的随意性。
3.抽象类的使用规则:
a.abstrauct定义抽象类。
b.abstrauct定义抽象方法,只需要声明,不需要写出具体代码!
c.包含抽象方法的类都为抽象类。
d.抽象类中可以包含普通方法,也可以没有抽象方法。
e.抽象类不能直接创建,可以定义引用变量。
public abstract class Telphone {
public abstract void cll();
public abstract void meassage();
}
现有抽象类Telphone
public class Smartphone extends Telphone {
@Override
public void cll() {
// TODO Auto-generated method stub
System.out.println("通过语音来打电话。");
}
@Override
public void meassage() {
// TODO Auto-generated method stub
System.out.println("通过语音来发短信。");
}
}
public class Cellphone extends Telphone {
public void cll() {
// TODO Auto-generated method stub
System.out.println("通过键盘打电话。");
}
@Override
public void meassage() {
// TODO Auto-generated method stub
System.out.println("通过键盘来发短信。");
}
}
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone tel1 = new Cellphone();
tel1.cll();
tel1.meassage();
Telphone tel2 = new Smartphone();
tel2.cll();
tel2.meassage();
}
}
通过键盘打电话。
通过键盘来发短信。
通过语音来打电话。
通过语音来发短信。
如上实现!
JAVA中的接口
1.接口概念:
由全局常量和公共抽象方法所组成的特殊类。接口也可以说是类的一种特殊规范,用来约束类的。
2.接口的定义:
用interface来定义。
[修饰符] interface 接口名[extebs 父接口1,父接口2,............]{
......................................
}
修饰符一般是public,并且系统会在interface的前面加上abstrauct,由于接口中的属性都是常量,所以在属性前面系统也会自动加上public static final关键字。接口中的方法也都只是抽象方法所以也会加上public abstruct关键字!
类在使用接口时可以使用implements关键字。
[修饰符] class 类名 extends 父类 implements 接口一,接口二,....{
......
}
像这样!
语法格式如下:
interface i = new interface(){
public void method{
System.out.println("匿名内部类实现接口");
}
};
i.method();
还有一种方法就是:
new interface(){
public void method{
System.out.println("匿名内部类实现接口");
}.method();
}
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone tel1 = new Cellphone();
tel1.cll();
tel1.meassage();
Telphone tel2 = new Smartphone();
tel2.cll();
tel2.meassage();
IPlaygame ip1 = new Smartphone();
ip1.playgame();
IPlaygame ip2 = new Psp();
ip2.playgame();
IPlaygame ip3 = new IPlaygame() {
@Override
public void playgame() {
// TODO Auto-generated method stub
System.out.println("使用匿名内部类的方式实现接口!");
}
};
ip3.playgame();
new IPlaygame() {
@Override
public void playgame() {
// TODO Auto-generated method stub
System.out.println("使用匿名内部类的第二种方式实现接口!");
}
}.playgame();
}
}
通过键盘打电话。
通过键盘来发短信。
通过语音来打电话。
通过语音来发短信。
具有玩游戏的功能!
具有玩游戏的功能!
使用匿名内部类的方式实现接口!
使用匿名内部类的第二种方式实现接口!