面向接口思想笔记

来源:互联网 发布:mac定制机 编辑:程序博客网 时间:2024/05/22 12:42

1,接口的本质

接口本身就是一钟完全抽象类,也就是说,里面的方法全部都是抽象方法,里面的变量全是常量


2,接口的定义

接口也是一个类,不过使用interface来进行声明,里面的方法与抽象方法一样,没有方法体

public interface Area {   public abstract double area(); //可以省略:public abstract   double perimeter();//Java会自动帮我们加:public abstract   //int x=5;   //public static final int MAX=5;   public static final int MAX=5;      public static final double PI=3.14;}


3,接口的使用

1)接口本身是不能new对象的,只能当作引用来用,引用的实例为实现类对象

2)一个类要实现接口,必须把接口中所有的抽象方法全部实现,否则就要声明成抽象类。 实现类我们有时也把它称为子类。

3)接口本身上是类,它继承自Object,因此通过接口引用可以访问Object中的所有方法


public class Rectangle implements Area{private int width;private int height;    public Rectangle(int width, int height) {this.width = width;this.height = height;}public Rectangle() {}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}//实现接口中的抽象方法public double area(){    return width*height;    }@Overridepublic double perimeter() {return (width+height)*2;}@Overridepublic String toString() {aa();return "一个矩形:"+width + ", " + height;}public void aa(){//x++;//MAX++;//WA:接口中的变量全是public static final的,不能重新赋值//MAX=10; //WASystem.out.println("MAX=" + MAX);}}


public class Circle implements Area {private int r;public Circle(int r) {this.r = r;}public Circle() {super();}@Overridepublic double area() {return PI*r*r;}@Overridepublic double perimeter() {return 2*PI*r;}@Overridepublic String toString() {return "圆,半径:" + r;}}

public class Rectangle implements Area{private int width;private int height;    public Rectangle(int width, int height) {this.width = width;this.height = height;}public Rectangle() {}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}//实现接口中的抽象方法public double area(){    return width*height;    }@Overridepublic double perimeter() {return (width+height)*2;}@Overridepublic String toString() {aa();return "一个矩形:"+width + ", " + height;}public void aa(){//x++;//MAX++;//WA:接口中的变量全是public static final的,不能重新赋值//MAX=10; //WASystem.out.println("MAX=" + MAX);}}

4,单继承,多实现

为了避免C++中 的钻石问题(大概就是一个类可以继承多个类,从而导致使用多态的时候对象需要随机调用父类方法),java放弃了多继承,而是使用单继承多实现的方式。

单继承:也就是一个类只能继承一个类(但可以一个类可以被多个类继承)

多继承:一个类可以实现多个接口,但是每一个接口的方法都需要实现,不然只能声明为抽象类,抽象方法


public class Globe implements Area,Volume {private int r;public Globe(int r) {this.r = r;}public Globe() {super();}@Overridepublic double volume() {return PI*4/3*r*r*r;}@Overridepublic double area() {return 4*PI*r*r;}@Overridepublic String toString() {return "一个球,面积:"+area()+",体积:"+volume();}}



5,接口的多继承

一个接口可以继承多个接口,里面并不实现任何方法,唯一的作用就是整合接口,方便使用,在实现这个接口的时候,需要实现它的所有方法,同时它也可以解决一些多态问题。但是在实际开发当中,我们并不建议使用这种方式,而是使用专一的接口,因为这会破坏数据的封装性,大家都是专一的人,何必呢得意


//把两个父接口中的抽象方法全部继承过来了---综合接口public interface AreaVolume extends Area,Volume {}public interface Area {public abstract double area();public static final double PI=3.14;}public interface Volume {public abstract double volume();}


6,值得注意的一点

因为接口中的public是可以省略的,所以在实现它的方法的时候,就需要注意权限问题了,子类的权限是不能低于父类的,但是我们通常充分使用myeclipse,就不会出现问题


7,为什么需要接口?

讲了那么多,到底java何解需要接口呢

1)接口具有封装隔离功能。

2)系统灵活性增强,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉

3)约束,要实现它,就必须实现它的全部方法













原创粉丝点击