抽象方法 要存放在 抽象类 中
public abstract class Person {
private String name;
private int age;
public void eat() {
System.out.println("吃饭");
}
public abstract void sleep();
//让一个方法不去做方法体时,就把它抽象。 一个抽象方法只能存放在一个抽象类。抽象类中不一定有抽象方法
//抽象概念就是提供灵活性,不像eat()一样写死
}
而抽象类中的方法 不一定 必须是抽象方法,但如果只想在抽象类中定义抽象方法,那就是接口。
接口就是对抽象类的简化和优化。
.接口的特征(7条)
1.接口用interface实现
public interface A { }
2.接口中所有的成员变量都是由public static final 修饰的 (默认可不写)
public interface A {
//接口中不能写属性。
//把量赋值当作 常量 定义,final修饰
int a=10;
}
3.接口中的所有方法默认都是public abstract修饰的( 默认可不写)
public interface Run {
//只需要定义 方法名和返回类型
void run();//没有返回值
int eat(); //有返回值的具体类型
}
4.接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是可以使用多态
public interface Run {
void run();
int sleep();
}
public class Cow extends Animal{
@Override
public void speak() {
// TODO 自动生成的方法存根
}
}
public class Test {
public static void main(String[] args) {
//接口类型的引用 指向实现类,也是多态
//接口是哪个类型的引用 只能调用该类型的方法
//Run 类型接口只能调用尔run,sleep方法
Run cowRun=new Cow();
cowRun.run();
cowRun.sleep();
//Animal 类型接口只能调用尔speak方法
//父类的引用类型指向子类时,只能调父类的方法,具体实现是子类来
Animal cowAnimal = new Cow();
cowAnimal.speak();
}
}
5.实现接口的类中必须实现接口中的所有方法,如果不实现接口中所有的方法,那么该类是抽象类
public class Person implements Run {
//implements 类 关联 接口
//一个类如果实现某个接口的话,必须实现接口里的所有方法
@Override
public void run() {
// TODO 自动生成的方法存根
}
@Override
public int eat() {
// TODO 自动生成的方法存根
return 0;
}
}
public abstract class Animal implements Run{
//但如果不想把接口中方法都具体实现,把类变为抽象类
public abstract void jump();//抽象类本身还可以再加写抽象方法
}
6.接口和接口之间可以互相继承,同时可以实现多继承
public interface A {
void a();
}
public interface B {
void b();
}
public interface C extends A,B{
//接口支持多继承
void c();//同时自身可以加方法
}
7.与继承关系类似,接口与实现类之间存在多态性
public interface Usb {
void service();
}
public class Upan implements Usb{
@Override
public void service() {
// TODO 自动生成的方法存根
System.out.println("u盘正常启动");
}
}
public class Computer {
//类中定义全局变量,类属性 (有static)或 对象属性
//全局变量不用赋初始值,有默认值 引用类型 null,int类型 0 ,布尔类型false
Usb usb1;//对象属性
Usb usb2;
Usb usb3;
//对象方法
public void run() {
System.out.println("电脑启动了");
if(usb1!=null) {
usb1.service();
}
if(usb2!=null) {
usb2.service();
}
if(usb3!=null) {
usb3.service();
}
}
}
public class Test {
public static void main(String[] args) {
Computer computer=new Computer();
//多态,一个接口类型 的引用 指向 其 实现类
computer.usb1 = new Upan();
computer.usb2 = new Upan();
computer.usb3 = new Upan();
computer.run();
}
}