java接口:interface 的和抽象类:abstract

1、接口的定义:关键词: interface   abstract 

package com.sky.bean;

public interface People {
    public abstract void printPeopleType(); //抽象方法,实现类必须得重写它
}

2、接口的实现类:关键词:    implements    @Override 

package com.sky.bean;
public class Student implements People {
    @Override
    public void printPeopleType() {
        System.out.print("\n学生");
    }
}
package com.sky.bean;
public class Teacher implements People {
    @Override
    public void printPeopleType() {
        System.out.print("\n老师");
    }

}

3、使用接口的好处

一、 对外只是以一个函数名的形式,没有实际实现内容,保护源码java

二、实现统一入口,多个实现的扩展ide

package com.sky.run;
import com.sky.bean.People; //接口
import com.sky.bean.Student;//People接口的实现类 1
import com.sky.bean.Teacher;//People接口的实现类 2

public class Main {

    public static void main(String[] args) {
        //可扩展成不一样的实现
        printPeopleType(new Student()); //输出学生
        printPeopleType(new Teacher()); //输出老师
    }
    private static void printPeopleType(People people) {
        //统一入口
        people.printPeopleType();

    }
    
}

4、 接口的注意事项

1. 接口不能用于实例化对象,但能够声明,后面能够new 实例化它的实现类给这个接口声明对象。函数

2. 接口没有构造方法。spa

3. 接口中全部的方法必须是抽象方法。(java新特性,容许接口方法为非抽象!).net

4. 接口不能包含成员变量,写了不能使用,由于不能实例化接口,如何调用?除了 static 和 final 变量。由于能够直接经过类名调用!code

5. 一个接口实现类能够同时实现多个接口类。对象

package com.sky.bean;

public class Student implements People,People2 {

    @Override
    public void printPeopleType() {
        System.out.print("\n学生");
    }

    @Override
    public void printPeopleType2() {
        System.out.print("\n学生2");

    }
}
package com.sky.run;
import com.sky.bean.People; //接口
import com.sky.bean.Student;//People接口的实现类 1
import com.sky.bean.Teacher;//People接口的实现类 2

public class Main {
    public static void main(String[] args) {
        //可扩展成不一样的实现
        Student student = new Student();
        printPeopleType(student); //输出接口1:People ----学生1
        student.printPeopleType2();// 输出接口2:People2 ----学生2
        printPeopleType(new Teacher());

    }
    private static void printPeopleType(People people) {
        //统一入口
        people.printPeopleType();
    }

}

5、与抽象类的区别

1. 抽象类除了不能实例化对象以外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类同样。因为抽象类不能实例化对象,因此抽象类必须被继承,才能被使用。继承

父类(抽象类)接口

package com.sky.service;

public abstract class Father {
    public String a = "  经过super取得父类的属性值 a";
    public void fun1(){
        System.out.print("\n 这是 Father.fun1()");
    }
}

子类(继承父类)get

package com.sky.service;

public class Child extends Father {

    //重写
    @Override
    public void  fun1(){
        System.out.print("\n 这是 Father.fun1() 在子类被 重写"+super.a);

    }
    //重载
    public void fun1(String str){
        System.out.print("\n 这是 Father.fun1() 在子类被 "+str+super.a);

    }
    public  void fun2(){
        System.out.print("\n 这是 子类本身独有的方法,非继承方法");
    }
}

不能实例化父类,由于它是抽象类,须要经过继承它的子类访问它的属性和方法

Child child = new Child();
child.fun1();  //重写父类的方法
child.fun1("重载");  //重载父类的方法
child.fun2();  //子类新增的方法,非继承

2. 而接口类是什么都没有,就只有一个空壳子!

相关文章
相关标签/搜索