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

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

package com.sky.bean;

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

二、接口的实现类:关键词:    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老师");
    }

}

三、使用接口的好处

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

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) {
        //可扩展成不同的实现
        printPeopleType(new Student()); //输出学生
        printPeopleType(new Teacher()); //输出老师
    }
    private static void printPeopleType(People people) {
        //统一入口
        people.printPeopleType();

    }
    
}

四、 接口的注意事项

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

2. 接口没有构造方法。

3. 接口中所有的方法必须是抽象方法。(java新特性,允许接口方法为非抽象!)

4. 接口不能包含成员变量,写了不能使用,因为不能实例化接口,如何调用?除了 static 和 final 变量。因为可以直接通过类名调用!

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

}

五、与抽象类的区别

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

父类(抽象类)

package com.sky.service;

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

子类(继承父类)

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. 而接口类是什么都没有,就只有一个空壳子!

转载于:https://my.oschina.net/u/3697586/blog/1588898

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值