0
点赞
收藏
分享

微信扫一扫

Java.抽象类&接口

Python百事通 2022-03-30 阅读 63

1.1抽象类的概念

抽象类主要指不能具体实例化的类并且使⽤ abstract 关键字修饰,也就是不能创建对象。

1.2 抽象⽅法的概念

抽象⽅法主要指不能具体实现的⽅法并且使⽤ abstract 关键字修饰,也就是没有⽅法体。

2.3 抽象类和抽象⽅法的关系

抽象类中可以有成员变量、构造⽅法、成员⽅法、静态成员等。

抽象类中可以没有抽象⽅法,也可以有抽象⽅法。

有抽象⽅法的类必须是抽象类,因此真正意义上的抽象类应该具有抽象⽅法且使⽤ abstract 关键字修饰。

2.4 抽象类的实际意义

抽象类的实际意义不在于创建对象⽽在于被继承。

当⼀个类继承抽象类后必须重写抽象⽅法,否则该类也变成抽象类.

   

public abstract class TesAbstract {

    public TesAbstract() {
    }

    
    public abstract void show();
}
public class SubTesAbstract extends TesAbstract {
    public void show(){
        System.out.println("被迫写的");
    }
    public void test(){
        System.out.println("独有的方法");
    }
    public static void main(String[] args){
        TesAbstract testabstract = new SubTesAbstract();
        testabstract.show();
        ((SubTesAbstract)testabstract).test();
    }

}
             

接⼝

2.1 基本概念

2.1.1接⼝是⽐抽象类还抽象的类,体现在所有⽅法都为抽象⽅法。

2.1.2定义类的关键字是 class ,⽽定义接⼝的关键字是 interface

2.1.3可以实现多继承。

 

public class Goldhavemoney implements People,Child{
    @Override
    public void costMoney() {
        System.out.println("iphone13 pro max, ipad pro2021,百达翡丽");
    }

    @Override
    public void eat() {
      System.out.println("炸鸡,汉堡,奶茶");
    }
    public static void main(String[] arg) {
        People people = new Goldhavemoney();
        people.eat();
        System.out.println("--------------------------------");
        Child child = new Goldhavemoney();
        child.costMoney();
    }
}
 interface Child {
    void costMoney();
}
 interface People {
    void eat();
}
package com.java.bean;

public class Goldhavemoney implements Child{
    @Override
    public void costMoney() {
        System.out.println("iphone13 pro max, ipad pro2021,百达翡丽");
    }

    @Override
    public void eat() {
      System.out.println("炸鸡,汉堡,奶茶");
    }
    public static void main(String[] arg) {
        People people = new Goldhavemoney();
        people.eat();
        System.out.println("--------------------------------");
        Child child = new Goldhavemoney();
        child.costMoney();
        child.eat();
        System.out.println("--------------------------------");
        Goldhavemoney jinyouxin = new Goldhavemoney();
        jinyouxin.costMoney();
        jinyouxin.eat();
    }
}
public interface Child extends People{
    void costMoney();
}
public interface People {
    void eat();
}

2.2类与接口的关系

名字关键字关系
类与类extends单继承
类与接口implements可以多继承
接口与接口extends可以多继承

注意

抽象类添加子类可以不重写,而接口增加方法实现类必须重写(Java8 before),从Java8开始添加新特性,接口可以有非抽象方法和静态方法,但是非静态方法用default,而且可以有私有方法。

 1

public interface Child extends People{
    void costMoney();
    default void play(){
        System.out.println("可以重写,也可以不重写");
    }
}

2.为了解决default里面代码的重复性,采用提取,打包成方法(private)


public interface Child extends People{
    void costMoney();
    default void play1(){
        //System.out.println("可以重写,也可以不重写");
        play();
    }
    default void play2(){
        //System.out.println("可以重写,也可以不重写");
        play();
    }
    private void play(){
        System.out.println("可以重写,也可以不重写");
    }
}

举报

相关推荐

0 条评论