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、实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活;
interface Usb{ int a=1; public void start(); public void stop(); } class Camera implements Usb{ public void start(){ System.out.println("Camera is starting"); } public void stop(){ System.out.println("Camera is stoping"); } } class Phone implements Usb{ public void start(){ System.out.println("Phone is starting"); } public void stop(){ System.out.println("Phone is stoping"); } } class Computer{ public void useUsb(Usb usb){ usb.start(); usb.stop(); } } public class Test { public static void main(String[] args){ System.out.println(Usb.a); Computer computer=new Computer(); Camera camera=new Camera(); Phone phone=new Phone(); computer.useUsb(camera); computer.useUsb(phone); } }
再一典型实例:
interface Car{ String getName(); int getPrice(); } class BMW implements Car{ public String getName(){ return "BMW"; } public int getPrice(){ return 300000; } } class CheryQQ implements Car{ public String getName(){ return "CheryQQ"; } public int getPrice(){ return 30000; } } public class CarShop { private int money=0; public void sellCar(Car car){ System.out.println("车型:"+car.getName()+",单价:"+car.getPrice()); money+=car.getPrice(); } public int getMoney(){ return money; } public static void main(String args[]){ CarShop carShop=new CarShop(); carShop.sellCar(new BMW()); carShop.sellCar(new CheryQQ()); System.out.println("总销售额:"+carShop.getMoney()); } }
=============================================================
final注意事项:
1、final修饰的变量又叫常量,一般用xx_xx_xx来命名;
2、final修饰的变量在定义时,必须赋值,并且以后不能再赋值或修改;
final使用时机:
1、因为安全的考虑,类的某个方法不允许修改;
2、类不会被其他的类继承;
3、某些变量值是固定不变的,比如圆周率3.1415926