javaSE接口随笔

接口

1. 如何定义抽象类和抽象方法

访问修饰符 abstract class 类名{
    
    访问修饰符 abstract 返回值 方法名(参数列表);
}

抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类

2. 如何定义接口,接口中能定义哪些方法

访问修饰符 interface 接口名{
    数据类型 变量名 = 变量的值; //接口中定义的变量都是公开的静态常量
    
    返回值类型 方法名(参数列表); //接口中定义的方法都是公开的抽象方法
    
    default 返回值类型 方法名(参数列表){// 接口中定义的默认方法都是公开的 => JDK1.8
        //代码块
        [return 返回值;]
    }
    
    static 返回值类型 方法名(参数列表){// 接口中定义的静态方法都是公开的 => JDK1.8
        //代码块
        [return 返回值;]
    }
    
    private 返回值类型 方法名(参数列表){// 接口中定义的默认方法都是公开的 => JDK1.9
        //代码块
        [return 返回值;]
    }
}

接口没有构造方法

3. 抽象类和接口的区别

a. 抽象类是一个类,所以抽象类只能单继承,而接口可以多继承。一个类在继承抽象类的同时还可以实 现一个或多个接口

b. 抽象类拥有构造方法,而接口没有

c. 抽象类中可以定义成员变量和受保护的、受包保护的成员方法,而接口中定义的变量都是公开的静态 常量,接口中定义的方法都是公开的抽象方法

d. 接口主要用于功能性方面的描述,而抽象类更加注重的是抽象事物的描述。

4.代码复现

package Shape;
/*
几何图形
 */
public abstract class Shape {
    public abstract Number perimeter();
    public abstract Number area();
}


package Shape;

public class Rectangle extends Shape{
    private int width;
    private int length;
    public Rectangle(int width, int length) {
        this.width = width;
        this.length = length;
    }
    public Integer perimeter() {
        return (width + length) * 2;
    }
    public Integer area() {
        return width * length;
    }
}


package Shape;

public class Circle {
    private int radius;
    public Circle(int radius) {
        this.radius = radius;
    }

    public Double perimeter() {
        return 2 * Math.PI * radius;
    }
    public Double area() {
        return Math.PI * radius * radius;
    }
}


package Shape;

public class ShapeTest {
    public static void main(String[] args) {
        Rectangle r1 = new Rectangle(10,8);
        System.out.println(r1.perimeter());
        System.out.println(r1.area());

        Circle c1 = new Circle(10);
        System.out.println(c1.perimeter());
        System.out.println(c1.area());
    }
}

package Person;

public interface Person {
    String getName();
}


package Person;

public interface Actor extends Person {
    void performance();
}


package Person;

public interface Artist extends Actor , Singer {

    void endorsement();
}


package Person;

public interface Singer extends Person {
    void sing();
}


package Person;

public class EntertainmentStar implements Artist {

    private String name;
    public EntertainmentStar(String name) {
        this.name = name;
    }
    @Override
    public void endorsement() {
        System.out.printf("娱乐明星%s代言\n",  getName());
}
    @Override
    public void performance() {
        System.out.printf("娱乐明星%s表演\n", getName());
    }
    @Override
    public void sing() {
        System.out.printf("娱乐明星%s唱歌\n", getName());
}
    @Override
    public String getName() {
    return name;
    }
}

package Person;

public class PersonTest {
    public static void main(String[] args) {
        Person p = new EntertainmentStar("刘德华");
        System.out.println(p.getName());

        Actor a = new EntertainmentStar("范冰冰");
        a.performance();

        Singer s = new EntertainmentStar("张学友");
        s.sing();

        Artist artist = new EntertainmentStar("古天乐");
        artist.endorsement();
        artist.performance();
        artist.sing();

    }
}

package printer;
/**
 * 打印机对外暴露有墨盒(颜色)和纸张(大小)接口,墨盒生产商按照墨盒接口的约定生产黑白墨盒和
 * 彩色墨盒,纸张生产商按照纸张接口的约定生产A2纸和A4纸张。
 */
public interface Paper {
    String getSize();
    //获取纸张大小
}


package printer;

public class A4Paper implements Paper{
    public String getSize() {
        return "A4Paper";
    }
}


package printer;

public class A2Paper implements Paper{
    public String getSize() {
        return "A2Paper";
    }
}


package printer;

/**
 * 打印机对外暴露有墨盒(颜色)和纸张(大小)接口,墨盒生产商按照墨盒接口的约定生产黑白墨盒和
 * 彩色墨盒,纸张生产商按照纸张接口的约定生产A2纸和A4纸张。
 */
public interface InkBox {
    String getColor();
}


package printer;

import javax.swing.*;

public class BlackInkBox implements InkBox {
    public String getColor(){
        return "black and white";
    }
}

package printer;

import java.awt.*;

public class ColorInkBox implements InkBox {
    public String getColor(){
        return "彩色";
    }
}


package printer;

import java.io.PrintStream;
import java.util.Scanner;

public class Printer {
    private InkBox inkBox;
    private Paper paper;
    public Printer(InkBox inkBox, Paper paper) {
        this.inkBox = inkBox;
        this.paper = paper;
    }
    public Printer() {

    }
    public void print() {
        PrintStream printf = System.out.printf(
                "printer use %s InkBox print on %s paper.\n",
                inkBox.getColor(), paper.getSize());
    }
    public InkBox getInkBox() {
        return inkBox;
    }
    public void setInkBox(InkBox inkBox) {
        this.inkBox = inkBox;
    }
    public Paper getPaper() {
        return paper;
    }
    public void setPaper(Paper paper) {
        this.paper = paper;
    }
}


package printer;

public class PrinterTest {
    public static void main(String[] args) {
        Printer p1 = new Printer();
        p1.setPaper(new A4Paper());
        p1.setInkBox(new ColorInkBox());
        p1.print();

        Printer p2 = new Printer(new BlackInkBox(), new A2Paper());
        p2.print();
    }
}
posted @ 2026-01-02 01:19  程玖浔  阅读(12)  评论(0)    收藏  举报