java接口可以扩展抽象类_java接口:interface 的和抽象类:abstract

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

package com.sky.bean;

public interface People {

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

}

二、接口的实现类:关键词:   implements

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值