java基础之抽象类,接口

    技术2026-04-22  14

    用于个人知识梳理 **抽象类:**抽象方法可以实例化,可以拥有抽象方法,也可以没有,可以有静态方法,也可以有非静态方法,和非抽象类唯一区别是如果在当前类实例化,需要借助匿名内部类,这个匿名内部类是他的子类等同于接口的实现类.只能单继承 代码演示 ``public abstract class AbstractDemo { private String name;

    {//如果这个类被实例化时,会执行这个代码 System.out.println("------------------"); } static {//如果这个类的方法被调用时,会执行这里的代码 System.out.println(“这个类用来给自己梳理知识!”); } public static void main(String[] args) { //抽象类可以实例化,就是得重写里面的抽象方法 AbstractDemo a= new AbstractDemo() {

    @Override public void drink() { // TODO Auto-generated method stub System.out.println("喝水"); } @Override public void die() { // TODO Auto-generated method stub System.out.println("啪,你死了"); }

    }; /*编译错误 AbstractDemo b= new AbstractDemo(); */ a.check(); a.drink(); a.die(); } public abstract void drink();//抽象类中的抽象方法 public abstract void die(); public void check() {//抽象类里的非静态方法 System.out.println(this.name+“让我康康你发育正不正常”); } public static void address() {//抽象类中的静态方法 System.out.println(“他住在下北泽”); }

    /* *默认方法仅用于接口,编译错误 default void check() {

    }*/

    public String getName() { return name; } public void setName(String name) { this.name = name; }

    } 对比

    public abstract class AD2 { private String name; {//如果这个类被实例化时,会执行这个代码 System.out.println("------------------"); } static {//如果这个类的方法被调用时,会执行这里的代码 System.out.println(“这个类用来给自己梳理知识!”); } public static void main(String[] args) { //抽象类可以实例化,就是得重写里面的抽象方法 AD2 a= new AD2() {

    }; a.check();

    }

    public void check() {//抽象类里的非静态方法 System.out.println(this.name+“让我康康你发育正不正常”); } public static void address() {//抽象类中的静态方法 System.out.println(“他住在下北泽”); }

    /* *默认方法仅用于接口,编译错误 default void check() {

    }*/ }

    接口: 接口中可以多继承,然后实现类需要实现所有抽象方法,接口中所有成员变量都是静态变量,接口中只能有静态方法,抽象方法,默认方法,静态方法通过类名来调用,默认方法要通过接口的实现对象去调.虽然在接口中可以通过匿名内部类直接创建接口的实现对象. 代码演示 ``public interface Pork { int S_A =17; int S_D = 3;

    public static void main(String[] args) { Pork p = new Pork() {

    @Override public void playPork() { // TODO Auto-generated method stub System.out.println("快乐斗地主"); }

    }; p.square(“卢本伟”); Pork.miao(); Pork.standUp(); } void playPork();//抽象方法 static void miao() {//静态方法 System.out.println(“大家都是十七张牌,你还能秒我”); } default void square(String name) {//默认方法 System.out.println(“从现在开始起这里叫”+name+“广场!”); } static void standUp() { System.out.println(“全体起立!所有人给我站起来!”); }

    } 编译不报错,用eclipse运行时可以选择运行两个类,运行子类,子类没有main方法,当然不行,但父类就没有问题 错误: 在类 test.Pork$1 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application ; 实现类中当然没有问题,lambda表达式应用于函数式接口,就是里面只有一个抽象方法的接口,简略代码. 总结,抽象类作为具体事物的特性抽象总结,接口而作为功能的抽象,都放在面向对象的特性中,在我现在看来,确实是体现了他能提高代码复用率的特点,更多的地方现在的我还体会不出来,如果以后的学习能让我有新的感悟,我还会继续补充.

    Processed: 0.012, SQL: 9