抽象类和接口的简单使用
为了实际开发中的可拓展行,本次内容会简单说明抽象类和接口 抽象方法:不能具体实现的方法同时使用abstract修饰,就是没有方法体 抽象类:不能具体实例化的类,使用abstract修饰

定义抽象类,定义接口,如果后期需要新增别的方法,也方便后期拓展
抽象类中的抽象方法不是必须的,可有可有 但是存在抽象方法的就必须是抽象类


下面分析一个问题,为什么抽象类无法新建对象?
那是因为抽象类中可能存在抽象方法,抽象方法是没有方法体的,也就是调用抽象方法是没有意义的
抽象类的意义不是创建对象而在于被继承


接口:比抽象类还抽象的存在
单继承却是可以多实现

抽象类和接口的区别 抽象类使用abstract class修饰 接口使用interface修饰 继承抽象类使用extends,实现接口使用implements 抽象类中可以有构造方法,但是接口不能有构造方法(因为接口中的都是抽象方法) 抽象类中有成员变量,接口中只能有常量
在jdk1.8中,接口新特性,接口可以增加非抽象方法


在jdk1.8中,接口新特性,接口也可以增加静态方法

一般静态方法多适用于工具类中

抽象类中可以写普通方法,方便普通类去继承

对于java的模板设计模式,是将不同对象相同的共性抽到父类中

/**
*
*/
package com.java.abstracttest;
/**
* @author yourheart
* @update 2022年3月29日 下午9:26:04
* @description:
*/
public abstract class HouseTemplate {
protected HouseTemplate(String name) {
this.name = name;
}
protected String name;
protected abstract void buildDoor();
protected abstract void buildWindow();
protected abstract void buildWall();
protected abstract void buildBase();
// 公共逻辑
public final void buildHouse() {
buildBase();
buildWall();
buildDoor();
buildWindow();
}
}
/**
*
*/
package com.java.abstracttest;
/**
* @author yourheart
* @update 2022年3月29日 下午9:26:46
* @description:
*/
public class HouseOne extends HouseTemplate {
HouseOne(String name) {
super(name);
}
@Override
protected void buildDoor() {
System.out.println(name + "的门要采用防盗门");
}
@Override
protected void buildWindow() {
System.out.println(name + "的窗户要面向北方");
}
@Override
protected void buildWall() {
System.out.println(name + "的墙使用大理石建造");
}
@Override
protected void buildBase() {
System.out.println(name + "的地基使用钢铁地基");
}
}
/**
*
*/
package com.java.abstracttest;
/**
* @author yourheart
* @update 2022年3月29日 下午9:28:12
* @description:
*/
public class HouseTwo extends HouseTemplate {
HouseTwo(String name) {
super(name);
}
@Override
protected void buildDoor() {
System.out.println(name + "的门采用木门");
}
@Override
protected void buildWindow() {
System.out.println(name + "的窗户要向南");
}
@Override
protected void buildWall() {
System.out.println(name + "的墙使用玻璃制造");
}
@Override
protected void buildBase() {
System.out.println(name + "的地基使用花岗岩");
}
}
public class Clienter {
public static void main(String[] args) {
HouseTemplate houseOne = new HouseOne("房子1");
HouseTemplate houseTwo = new HouseTwo("房子2");
houseOne.buildHouse();
houseTwo.buildHouse();
}
}
浙公网安备 33010602011771号