1、类是类,接口是接口,它们是同一层次的概念
2、接口使用interface 声明
3、JDK1.8之前,接口中只有两部分内容:
常量:固定修饰符 public static final
抽象方法:固定修饰符 public abstract
*修饰符可以省略不写,IDE会自动补全
4、类 实现implements 接口
如果该类是抽象类,则可以不重写接口中的抽象方法
如果该类不是抽象类,则必须重写所有接口中所有抽象方法
5、java中单继承,多实现
一个类只能有一个直接父类,但是一个类可以实现多个接口
写法:先继承后实现:
class Dog extends Animal implements TestInterface01,TestInterface02
6、接口是抽象的无法实例化,不可创建对象
7、接口中常量的访问
接口名.常量名
实现该接口的类名.常量名
实现该接口的类的对象名.常量名
8、接口定义规则,实现类负责实现。
9、继承与实现区分:
继承:子类对父类的继承,“is-a”,“是一个”
实现:类对接口的实现,“has-a”,“具备”
举例: 手机与照相机
手机不继承自(不是一个)照相机
手机具备(实现了)照相机的功能
10、多态的应用场景:
父类作方法的形参,传入具体子类的对象
父类作方法的返回值,返回的是具体的子类的对象
接口作方法的形参,传入实现类的对象
接口作方法的返回值,返回的是具体实现类的对象
1、IDEA新建接口
2、练习代码如图
package com.llg.learnInterface;
//1、接口中没有构造器
//2、使用interface 声明接口
//3、JDK1.8之前,接口中只有两部分内容:
// 3.1)、 常量:固定修饰符 public static final
// 3.2)、 抽象方法:固定修饰符 public abstract
// 修饰符可以省略不写,IDE会自动补全
public interface RunnableInterface {
//常量
public static final int MAX_SPEED=300;
//抽象方法
public abstract void run();
}
package com.llg.learnInterface;
//1、接口中没有构造器
//2、使用interface 声明接口
//3、JDK1.8之前,接口中只有两部分内容:
// 3.1)、 常量:固定修饰符 public static final
// 3.2)、 抽象方法:固定修饰符 public abstract
// 修饰符可以省略不写,IDE会自动补全
public interface JumpableInterface {
//常量
public static final double MAX_HEIGHT=200.9;
//抽象方法
public abstract void jump();
}
package com.llg.learnInterface;
public class Animal{
int age;
public void sleep(){
System.out.println("sleep ~~");
}
}
package com.llg.learnInterface;
//4、类 实现implements 接口
//5、java中单继承,多实现
// 一个类只能有一个直接父类
// 一个类可以实现多个接口
// 写法,先继承后实现: class Dog extends Animal implements TestInterface01,TestInterface02{
public class Dog extends Animal implements RunnableInterface,JumpableInterface{
@Override
public void run() {
System.out.println("run ~~run~");
}
@Override
public void jump() {
System.out.println("jump ~jump~~");
}
}
//如果该类是抽象类,则可以不重写接口中的抽象方法
abstract class Dog01 implements RunnableInterface{
}
//如果该类不是抽象类,则必须重写所有接口中所有抽象方法
class Dog02 implements RunnableInterface{
@Override
public void run() {
System.out.println("run ~~run~");
}
}
package com.llg.learnInterface;
public class Learn {
//程序的入口
public static void main(String[] args) {
//接口是抽象的无法实例化,不可创建对象
//TestInterface01 t=new TestInterface01();
RunnableInterface t=new Dog();//向上转型, 接口指向对象 多态应用
t.run();
//接口中常量的访问
System.out.println(RunnableInterface.MAX_SPEED);//接口名.常量名
System.out.println(Dog.MAX_SPEED); //实现该接口的类名.常量名
System.out.println(t.MAX_SPEED);//实现该接口的类的对象名.常量名
}
}