一、抽象类
1、当父类中的一些方法不能确定时,可以用abstract关键字来修饰该方法,用abstract来修饰该类
2、抽象类不允许被实例化(Animal an = new Animal())——(Animal an = new Cat())
3、抽象类中可以没有abstract抽象方法(abstract public void cry(){} ),但可以有实现方法(public void sx(){} )
4、当一个子类继承的父类是abstract抽象类的话,需要程序员把抽象类的抽象方法全部实现,即子类的成员方法覆盖父类的抽象方法。
5、抽象方法不能有主体
正确:abstractt void cry();
错误:abstract void cry(){};
二、接口
1、使用implements来实现接口
2、接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些接口写出来。
3、(1)接口可以被看成是更加抽象的抽象类;
(2)接口不能被实例化;
(3)所有的方法都不能有主体;
(4)一个类可以实现多个接口;
(5)接口可以有变量,但变量不能用private和protected来修饰,接口中的变量本质上都是static类型的,而且是final类型;
(6)一个接口不能继承其他的类,但可以继承别的接口
4、接口的建立语法:interface 接口名{ };
语法:class 类名 implements 接口{ }
5、接口继承接口用extends,类继承接口用implements.
6、所有的操纵要放在类名文件之外。
6、演示
//接口的实现[Demo125.java]
//电脑,相机,u盘,手机
//usb接口
interface Usb{
int a=1;//加不加static都是静态的,不能用private和protected修饰
//声明了两个方法
public void start();//接口开始工作
public void stop();//接口停止工作
}
//编写了一个相机类,并实现了usb接口
//一个重要的原则:当一个类实现了一个接口,要求该类把这个接口的所有方法全部实现
class Camera implements Usb{
public void start(){
System.out.println("我是相机,开始工作了..");
}
public void stop(){
System.out.println("我是相机,停止工作了..");
}
}
//接口继承别的接口
class Base{
}
interface Tt{
}
interface Son extends Tt{
}
//编写了一个手机,并实现了usb接口
class Phone implements Usb{
public void start(){
System.out.println("我是手机,开始工作了..");
}
public void stop(){
System.out.println("我是手机,停止工作了..");
}
}
//计算机
class Computer{
//开始使用usb接口
public void useUsb(Usb usb){
usb.start();
usb.stop();
}
}
public class Demo125 {
public static void main(String[] args) {
System.out.println(Usb.a);
//创建 Computer
Computer computer=new Computer();
//创建Camera
Camera camera1=new Camera();
//创建Phone
Phone phone1=new Phone();
computer.useUsb(camera1);
computer.useUsb(phone1);
}
}
7、子类只能直接继承一个父类但是可以继承多个接口
三、final
1、当不希望父类的某个方法被子类覆盖是,可以使用final关键字修饰
2、当不希望类的某个变量的值被需改,可以用final修饰。若一个变量是final,则必须赋初值。
3、当不希望类被继承是,可以用final修饰
4、final修饰的变量又叫做常量,一般用XX_XX_XX来命名
5、final 修饰的变量在定义时,必须赋值,并且以后不能再赋值
6、final用的场合:(1)因为案例的考虑,类的每个方法不允许修改
(2)类不会被其他类继承;
(3)某些变量值是固定不变的
//final方法的使用[Demo128.java]
public class Demo128 {
public static void main(String[] args) {
Aaa aaa=new Aaa();
aaa.show();
Bbb bbb=new Bbb();
bbb.show();
}
}
class Aaa{
int a=0;//如果a不赋初值,a是0。定义类型后应赋值
//圆周率不让修改
//带有final修饰的变量命名时应有_下划线来区分表示。这是java程序员的标准。
final float reate_1=3.1415926f;//使用final可以保证,需要强制不被修改的数据一定要用final锁定
//final int b; //使用final定义变量时一定要赋初值否则报错。
//b=1;
final public void sendMes(){//给成员方法用final来修饰则表示不可以被修改,不可被覆盖。
System.out.println("发送消息");
}
public void show(){
System.out.println("a="+a);
}
}
final class Bbb extends Aaa{//定义类前加final表示该类不允许被继承
public Bbb(){
a++;
//reate_1=reate+1;
}
/*public void sendMes(){
System.out.println("发送消息")
}*/
}