JAVA入坟12 抽象类和接口
居然连着更新两天 我不是我了
抽象类
理解:“用进废退”:多态的领域, 父类中被子类重写的实例方法,功能逐渐淡化,索性去掉方法体 退化为抽象方法
抽象方法使用规则
1.没有方法体的方法,就是抽象方法。
2.abstract修饰符修饰
3.抽象方法只是用来定义规范的。告诉子类应该做什么,具体怎么做,不同的子类有不同的实现
4.不能私有、静态、final
抽象类使用规则
1.被abstract修饰的类是抽象类
2.抽象类中可以有抽象方法,也就是被abstract修饰的方法,也可以没有。
3.抽象方法没有方法体,只有方法声明。
4.子类继承抽象类需要重写父类所有的抽象方法,否则,子类也必须声明为抽象类
5.抽象类有构造方法,但是不能被显示调用,也就是不能实例化,或者说抽象类没有对象。–防止直接调用抽象方法
6.抽象类的构造方法只在子类实例化时隐式调用。
7.抽象类的使用一般是作为引用类型,指向非抽象的引用实例,体现出多态。
8.构造方法和静态方法都不能(abstract)抽象修饰
静态方法不能被子类覆盖(重写),一旦声明为抽象方法 将永远没有具体的实现
案例:
抽象类门有两个抽象方法,关和开;接口锁也有两个抽象方,锁门(lockUp)和开锁(openLock);防盗门类TheftproofDoor,继承门,实现锁接口的抽象方法(共4个)。编写测试类,调用防盗门重写的四个抽象方法。
public interface Suo {
void lockUp();
void openLock();
}
public abstract class Door {
public abstract void open();
public abstract void close();
}
public class TheftproofDoor extends Door implements Suo{
@Override
public void open() {
System.out.println("用力推,门打开了。");
}
@Override
public void close() {
System.out.println("拉门,门关上了。");
}
@Override
public void lockUp() {
System.out.println("插进钥匙,向左转三圈,锁上,拔出钥匙");
}
@Override
public void openLock() {
System.out.println("插进钥匙,向右转三圈,开锁,拔出钥匙");
}
}
public class testDoor {
public static void main(String[] args) {
Suo suo = new TheftproofDoor();
Door d = new TheftproofDoor();
d.close();
suo.lockUp();
suo.openLock();
d.open();
}
}
接口
接口可以理解为定义的一组通用的组件,或者是对外提供服务的功能模块。接口比抽象类更抽象,已经完全抽象得没边没影。
接口通常作为实体类的成员属性,和类是附属关系,而不是包含关系。
1.接口的语法规则
1.定义一个接口:
public interface 接口名{
}
和定义类的区别在于,将class关键字换成了interface
2.接口中也有成员属性和方法
成员属性: public static final (公共的静态常量)类型
成员方法:public abstract (公共的抽象方法) 或静态方法
案例也在上面 我懒 嗷 还有 点个赞!