java高级——接口

本文详细介绍了Java8中接口的特性,包括引入的默认方法以解决接口升级问题,以及接口中常量的定义和使用规则。同时,对比了接口与抽象类的异同,并通过示例展示了如何在类中实现接口的默认方法和抽象方法。强调了在编程实践中,多用接口来实现代码的解耦和维护。
摘要由CSDN通过智能技术生成

接口

从java8开始,接口中允许定义默认方法

备注:接口中的默认方法可以解决接口升级的问题

默认方法的格式:

public default 返回值类型方法名称(参数列表){

//方法体

}

注意:

1.接口的默认方法,可以通过接口实现类对象直接调用

2.接口的默认方法,也可以在接口的实现类中进行覆盖重写

接口中的常量

格式:

public static final 数据类型 常量名称=数据值;

注意事项:

1.接口中的常量,可以省略public static final,注意,不写也认为是常量

2.接口中的常量,必须进行赋值

3.接口中的常量名称,使用完全大写的字母,多个单词用下划线连接

接口与抽象类:

相同点:

1.都包含抽象方法

2.都代表系统的抽象层,都不能被实例化

3.用于描述系统的服务,不必提供具体的实现

不同点:

一个类只能继承一个直接父类,但是可以实现多个接口

抽象类更多的用于代码的复用,接口便于代码维护

多用接口,少用继承

/**
 *接口
 */
public interface Camera {
​
    /**
     * 拍照
     */
    public void photo();
​
    /**
     * 录像
     */
    public void video();
}
​
/**
 * 抽象门类
 */
public abstract class Door {
​
    //开门
    public abstract void open();
​
    //关门
    public abstract void close();
}
public class FDoor extends Door implements Lock,Camera{
    @Override
    public void open() {
        System.out.println("开门");
    }
​
    @Override
    public void close() {
        System.out.println("关门");
    }
​
    @Override
    public void lock() {
        System.out.println("加锁");
    }
​
    @Override
    public void unLock() {
        System.out.println("开锁");
    }
​
    @Override
    public  void photo() {
        System.out.println("上锁后拍摄照片2张");
    }
​
    @Override
    public void video() {
        System.out.println("保持录像,默认录像30分钟清除一次");
    }
​
    @Override
    public void test() {
        System.out.println("实现类重写");
    }
}
​
 

注意事项:

1.接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract

2.这两个关键字修饰符,可以选择性省略

java中四种权限访问修饰符

publicprotecteddefault(默认的)【可以不写】private
同一个类中yesyesyesyes
同包子类yesyesyesno
同包非子类yesyesyesno
不同包子类yesyesnono
不同包非子类yesnonono

方法的访问与类的访问规则相同!

本文是一个word讲义 介绍了 Figure circle Rectangle等类在接口中计抽象类中的用法 抽象类 接口多态 public class Polymorphism { public static void main(String args[]) { Triangle t=new Triangle(5.0,2.0); t.show_area(); Rectangle r=new Rectangle(3.0,4.0); r.show_area(); Circle c=new Circle(10.0); c.show_area(); } } abstract class Figure { protected double x=10.0,y=5.0; abstract void show_area(); } class Triangle extends Figure { Triangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("triangle:"+(0.5*x*y)); } } class Rectangle extends Figure { Rectangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("rectangle:"+(x*y)); } } class Circle extends Figure { Circle(double a){x=a;} final double pi=3.1416; void show_area() { System.out.println("circle:"+(pi*x*x)); } } package inf; interface Figure { abstract double area(); } //Rectangle.java package inf; /** * * @author tai */ public class Rectangle implements Figure{ double width,height; public Rectangle(double w,double h) //构造方法 { width=w; height=h; } public double area(){ return (width * height); } } //Triangle.Java package inf; /** * * @author tai */ class Triangle implements Figure { double a; double b; double c; Triangle(double a,double b,double c) { this.a=a; this.b=b; this.c=c; } public double area() { double p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } } //Circle.java package inf; /** * * @author tai */ class Circle implements Figure { double radius; Circle(double radius) { this.radius=radius; } public double area() { return Math.PI*radius*radius; } } 测试一: public class Test4 { public static void main(String args[]) { Triangle t=new Triangle(5.0,6.0,7.0); System.out.println("三角形面积="+t.area()); Rectangle r=new Rectangle(3.0,4.0); System.out.println("矩形面积="+r.area()); Circle c=new Circle(10.0); System.out.println("圆的面积="+c.area()); } } 测试二: package inf; import javax.swing.JOptionPane; public class Test5 { public static double totalArea1(Figure f[]) { double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } return totalArea; } public static void main(String args[]) { Figure f[] =new Figure[3];//为什么 f[0]=new Triangle(5.0,6.0,7.0); f[1]=new Rectangle(6.0,87.0); String input=JOptionPane.showInputDialog("输入圆的半径"); Double r=Double.parseDouble(input); f[2]=new Circle(r); double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } JOptionPane.showMessageDialog(null,"totalarea="+totalArea); JOptionPane.showMessageDialog(null,"totalarea1="+totalArea1(f)); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值