1、父类方法不能确定时 ,可以用abstract关键字来修饰该方法;
2、当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实现;
抽象类的注意事项:
1、抽象类不能被实例化;
2、抽象类不一定要包含抽象方法,也就是说,抽象类可以没有abstract方法;
3、一旦包含类abstract方法,则这个类必须声明为abstract;
4、抽象方法不能有主体,如:abstract void aaa(){};
------------------------------------------------------------------------------------------
接口就是给出一些没有内容的方法,封装在一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。语法如下:
class 类名 implement 接口 {
方法;
变量;
}
接口是更加抽象的抽象类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。
接口体现了程序设计的多态和高内聚低耦合的设计思想。
接口的注意事项:
1、接口不能被实例化;
2、接口中所有的方法都不能有主体;
3、一个类可以实现多个接口;
4、接口中可以有变量(但变量不能用private和protected修饰),接口中的变量本质上都是static的,而且是final,不管你加不加static修饰;在java开发中,我们经常把经常用的变量,定义在接口中作为全局变量使用;
5、一个接口不能继承其他的类,但可以继承别的接口;
实现接口VS继承类
java的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类的纯洁性,比C++中的多继承机制简洁。
1、实现接口可以看作是对继承的一种补充;
2、实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活;
interfaceUsb{int a=1;public voidstart();public voidstop();
}class Camera implementsUsb{public voidstart(){
System.out.println("Camera is starting");
}public voidstop(){
System.out.println("Camera is stoping");
}
}class Phone implementsUsb{public voidstart(){
System.out.println("Phone is starting");
}public voidstop(){
System.out.println("Phone is stoping");
}
}classComputer{public voiduseUsb(Usb usb){
usb.start();
usb.stop();
}
}public classTest {public static voidmain(String[] args){
System.out.println(Usb.a);
Computer computer=newComputer();
Camera camera=newCamera();
Phone phone=newPhone();
computer.useUsb(camera);
computer.useUsb(phone);
}
}
再一典型实例:
interfaceCar{
String getName();intgetPrice();
}class BMW implementsCar{publicString getName(){return "BMW";
}public intgetPrice(){return 300000;
}
}class CheryQQ implementsCar{publicString getName(){return "CheryQQ";
}public intgetPrice(){return 30000;
}
}public classCarShop {private int money=0;public voidsellCar(Car car){
System.out.println("车型:"+car.getName()+",单价:"+car.getPrice());
money+=car.getPrice();
}public intgetMoney(){returnmoney;
}public static voidmain(String args[]){
CarShop carShop=newCarShop();
carShop.sellCar(newBMW());
carShop.sellCar(newCheryQQ());
System.out.println("总销售额:"+carShop.getMoney());
}
}
=============================================================
final注意事项:
1、final修饰的变量又叫常量,一般用xx_xx_xx来命名;
2、final修饰的变量在定义时,必须赋值,并且以后不能再赋值或修改;
final使用时机:
1、因为安全的考虑,类的某个方法不允许修改;
2、类不会被其他的类继承;
3、某些变量值是固定不变的,比如圆周率3.1415926