一.抽象类
在java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。抽象方法所在的类必须定义为抽象类。
当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现,而是在抽象类的子类中通过方法重写进行实现。
语法格式为:[访问修饰符]<返回类型><方法名>([参数列表]);
**注意:**1.抽象方法只能定义在抽象类中。但是抽象类中可以包含抽象方法,也可以包含普通方法,还可以包含普通类包含的一切成员。
2. 抽象类可以没有抽象方法,但包含了抽象方法的类必须定义为抽象类
3.如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
4.没有抽象构造方法(构造方法即创建对象就是为了实例化),也没有抽象静态方法(静态方法可以通过类名.方法出来
5.属性必然是具体的,需要去实例化的
让我们具体分析一下:
父类:可以看出它是一个抽象类,但是它具有抽象方法和普通方法
public abstract class Man {
String name;
String sex;
int age;
double height;
double weight;
public abstract void eat();
public abstract void drink();
public void shit(){
System.out.println("Shit!!!");
}
public void sleep(){
System.out.println("睡就是了");
}
}
子类:所以在子类中我们要实现父类的抽象方法就必须重写方法,而对于父类的普通方法就可以继承过来。
public class Student extends Man {
@Override
public void eat() {
System.out.println("去食堂吃饭");
}
@Override
public void drink() {
System.out.println("喝饮水机的水"); }
@Override
public void shit() {
super.shit();
}
@Override
public void sleep() {
super.sleep();
}
}
二.接口
需要知道的十二条原则:
1.如果抽象类中所有的方法都是抽象方法,就可以使用java提供的接口来表示。
2.定义接口使用interface关键字
实现接口使用implements关键字
3.接口中不能有构造方法;
4.接口的抽象方法只能由public 修饰
5.接口不能被实例化
6.实现类必须实现接口的所有方法,除非是抽象类
7.实现类可以实现多个接口,用逗号隔开
8.接口中的所有方法默认都是公共抽象方法
9.接口的目的之一是订立一个标准
10.接口里的属性都是 public static final int LENGTH=10;静态常量,而且必须被初始化且赋值。因为是final,所以变量必须全大写。
11.接口中啥都没有表示实现这个接口时都是此接口的子类
12.一个接口不能实现另一个接口,但能继承多个接口。
搞一个例子来使这些说法具体形象化吧:
组装一台电脑,使得其cpu,内层,硬盘等参数显示出来。
首先先是写三大接口:
public interface CPU {
String cpu();
double cpu1();
}
public interface EMS {
String ems();
int ems1();
}
public interface HardDisk {
int yinpan();
}
然后实现三大接口:
public class GetCPU implements CPU {
@Override
public String cpu() {
return "Intel";
}
@Override
public double cpu1() {
return 3.2;
}
}
public class GetEMS implements EMS {
@Override
public String ems() {
return "三星"; }
@Override
public int ems1() {
return 32; }}
public class GETHardDisk implements HardDisk {
@Override
public int yinpan() {
return 512; }}
然后写一个主装类,并且测试它
public class ZuZhuang {
public void show(CPU c,EMS e,HardDisk h){
System.out.println("电脑的cpu是"+c.cpu()+"主频是"+c.cpu1()+
"\n内存是"+e.ems()+"有"+e.ems1()+"\n硬盘是"+h.yinpan()); }
public static void main(String[] args) {
ZuZhuang z=new ZuZhuang();
CPU c=new GetCPU();
EMS e=new GetEMS();
HardDisk h=new GETHardDisk();
z.show(c,e,h); }}
最后输出结果是: