JAVA三大特色之三:多态。

多态:

多态,就是多种形态。多态又分引用多态,方法多态。
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();
	
	

 
	}
	
}
通过键盘打电话。
通过键盘来发短信。
通过语音来打电话。
通过语音来发短信。
具有玩游戏的功能!
具有玩游戏的功能!
使用匿名内部类的方式实现接口!
使用匿名内部类的第二种方式实现接口!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值