马太效应 发表于 2017-7-26 23:01:00

Java暑期学习Day22

今天是第22天)

static/image/hrline/2.gif

接口与多态
1.接口语法


interface接口名{
//静态常量、抽象方法
}

对于定义行为,可以使用interface关键字定义,接口中的方法不能操作,直接表示为abstract,而且一定是public。

类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方法,一是操作接口中定义的方法,二是再度将该方法标识为abstract。

2.接口的特点
a.接口中只能存放静态常量和抽象方法;

b.Java接口是对功能的扩展。

c.通过实现接口,java类可以实现多实现。

d.一个类可以同时继承(extends)一个父类并且实现(implements)多个接口。

e.接口和接口之间可以通过extends来产生继承关系。
(接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。)


以Java的语意来说,继承会有“is-a”的关系,操作接口则表示“拥有行为”,但不会有“is-a”的关系。
对于接口多态语法的判断,方法是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。


3.接口与抽象类的区别
a.抽象类与具体实现类之间是一种继承关系,也就是说如果采用抽象类的方法,则父类和子类在概念上应该是相同的。

b.接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。

c.抽象类是对一组具有相同属性和行为的逻辑上有关系的事物的一种抽象,而接口是对一组具有相同属性和行为的逻辑上没有关系的事物的一种抽象。

d.抽象类——“is-a”;接口——“like-a”。


/*
*
* 开发系统时,主体构架使用接口,接口构成系统的骨架
*
*
*
*/

public class InterfaceDemo {
        public static void main(String[] args) {
                Person p = new Person();
                Child child = new Child();
                Dog dog = new Dog();
                p.feed(child);
                p.feed(dog);

        }
}

interface IAbility {
        void eat();

        // 接口中只能放有公有的静态常量和抽象方法
        // public static final int number=1;
        //
        // 默认会加public static final
        //
        // public abstract void show();
        // 默认会加public abstract
}

class Child implements IAbility {

        public void eat() {

                System.out.println("吃米饭");

        }

}

class Person {
        // public void feed(Child child){
        // child.eat();
        // }
        // public void feed(Dog dog){
        // dog.eat();
        // }
        // 接口的应用变量可以引用其实现类的对象
        // 接口实现了多态
        public void feed(IAbility ability) {

                ability.eat();// 动态绑定

        }
}

class Dog implements IAbility {

        public void eat() {

                System.out.println("啃骨头");

        }

}
结果——


吃米饭
啃骨头





页: [1]
查看完整版本: Java暑期学习Day22