在一次看了java基础视频,对多态,抽象类有了新的理解:
1.多态
多态就是一个引用(类型)在多种情况下的不同状态。
比如:
一个Animal,它有一个cry() 方法,但是,这个Animal自己也不确定它是什么动物,所以,也就不知道怎么叫。
class Animal(){
public void cry(){
Sysetm.out.println("不确定怎么叫。。。。");
}
}
在这里 我们有2个类,一个是dog() ,一个是cat(),他们同样会叫,这个时候他们知道自己怎么叫了,但他们 同样是一个Animal,这个时候可以从Animal继承了。
class dog extends Animal(){
public void cry(){
//狗叫
System.out.println("旺旺叫........");
}
}
class cat extends Animal(){
public void cry(){
//猫叫
System.out.println("喵喵叫......");
}
}
*值得注意的是,当我们想人dog叫的时候,我们就实例化一个dog类,想让猫叫就实例化一个cat(),那么当我们的子类越来越多的时候,管理起来就麻烦了,这个时候我们可以父类引用指向不同的子类对象。如:
Animal an=new dog();
这时候 an.cry(); 就是调用dog的cry()方法。cry()是旺旺叫...
同样: Animal an=new cat(); an.cry() .输出是 喵喵叫....
这里体现的就是多态。当Animal没有这个cry()方法的时候,an.cry()是会出错的,是因为它无法通过父类的cry()找到子类的cry() .这里是一个方法覆盖。
2.抽象类
1.)从多态可以看出来 Animal()的cry方法不确定,当我们从父类继承过来时一直都是覆盖掉的,父类里的本身是没有用到过 ,这个时候我们可以写成抽象的方法 ,用abstract 来修饰。abstract public void cry(); 这个Animal类也要用abstract 修饰。 abstract class Animal{}
2.)抽象类 我们还是可以像正常类一样继承的,但是这个时候,要实现它的所有抽象方法。
这样真正体现了这个类设计的思想,他的意思是说,现在我还不知道你要干什么,但是一定会用,所以我留在这没有写, 是一个抽象的,只要你继承了这个抽象方法,那么你就必须要实现我的所有方法,你可以根据自己的情况,想怎么实现就怎么实现,比如,dog可以重新实现cry()想让它怎么叫就怎么叫。
3.)抽象类是不能实例化的,因为连类本身它都不知道是干什么的,他是不完全的,他怎么能被实例化呢。
4.)抽象类可以没有抽象方法,也就是说 编译器只要见到abstract了就知道是抽象方法了,同样也不能被实例化的。
5.) 抽象类不能有主体,例如:abstract public void cry(){} 这是错的!!!!!
6.)抽象类中可以有实现了的方法,只要用abstract就不能有主体了。
3.接口
一个类实现了一个接口,那么这个类就可以交给接口来使用。
比如:interface Usb{
public void start(){
System.out.println("开始工作了");
}
public void start(){
System.out.println("停止工作了");
}
}
//电话类
class phone implement Usb{
public void start(){
System.out.println("我是手机 开始工作了");
}
public void start(){
System.out.println("我是手机 停止工作了");
}
}
//电脑
class computer {
public void useUsb(Usb usb){
usb.start();
usb.stop();
}
}
当调用的时候,phone p=new phone();
computer c=new computer();
c.useUsb(p);//这是因为,phone实现了接口,所以可直接交给接口
1.)接口是更加抽象的抽象类
2.)接口中的变量是static的。在开发中,我们经常把变量放在接口中,做为全局变量使用。接口名.变量名
3.)接口不能继承其他类,可以实现其他接口