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();
}
}

浙公网安备 33010602011771号