抽象类
- 抽象类是一种模板模式。抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上扩展。
- 通过抽象类,可以避免子类设计的随意性。
- 要点:
有抽象方法的类才能定义抽象类;
抽象类不能实例化,不能用new来实例化抽象类,只能new子类对象;
抽象类只能用来继承;
抽象方法必须被子类实现。 - 抽象方法的意思使得设计与实现分开,父类设计的方法(abstract)只是声明,实现由子类去完成。
比如:父类Animal(abstract)声明一种抽象方法shout(),子类狗,猫必须实现这个方法,但是两个不同,狗是汪,猫是喵。。
代码
public abstract class Animal {
String str;//可定义普通属性
public abstract void run();//抽象方法
public void breath() {//可定义普通方法
System.out.println("呼吸!");
}
}
class Cat extends Animal{
@Override
public void run() {
System.out.println("猫步小跑");
}
}
class Dog extends Animal{
@Override
public void run() {
System.out.println("狗刨");
}
}
接口
- 接口(interface)可以理解为:比抽象类还抽象的抽象类,里面只有常量和方法声明。
- 全面专业的实现了:设计规范和具体实现的分离。
- 接口就是滚翻,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”,例如人一定能吃饭。
- 子类只能implements(实现) interface,不能extends(继承) interface,而且子类中必须实现接口中所有的方法;
- 格式:
[访问修饰符] interface 接口名 [extends 父接口1,父接口2、、、]{
-常量定义//总是public static final
-方法定义//总是public abstract
} - 接口支持多继承。此时实现此接口的类也需要重写父接口中的所有方法。
代码1(接口)
public interface MyInterface {//接口的意义使得设计与实现分离
//接口里面只有常量和抽象方法
/*public static final 默认常量,接口中常量定义时写与不写都有*/ String MAX_GREAD = "BOSS";
int MAX_SPEED = 120;
/*public abstract写与不写都是public abstract*/void test01();
public int test02(int a,int b);
}
接口里面只有常量和抽象方法。
代码2(子类实现)
public class MyClass implements MyInterface{//接口不同extends,直接用implements(实现)
@Override
public void test01() {
//MyInterface.MAX_GREAD
System.out.println("test01");
}
@Override
public int test02(int a, int b) {
System.out.println("Myclass.test02");
return a+b;
}
}
必须实现父接口中的方法。
代码3(接口的继承)
public interface InterfaceA {
void aaa();
}
interface InterfaceB{
void bbb();
}
interface InterfaceC extends InterfaceA,InterfaceB{
void ccc();
}
class TestClass implements InterfaceC{
@Override
public void aaa() {
// TODO Auto-generated method stub
}
@Override
public void bbb() {
// TODO Auto-generated method stub
}
@Override
public void ccc() {
// TODO Auto-generated method stub
}
}
子类必须实现父接口以及父接口的所有父接口中的所有方法(eclipse中有很方便的提示,点击即可自动重写方法)