第十周总结 抽象类和接口
abstact抽象的----(很不具体 没有具体的执行 只是个概念)
1.可以修饰什么
修饰方法
用abstract修饰符修饰的方法 只有方法的结构 没有方法执行体叫做抽象方法
当然注意native修饰的方法虽然也没有方法体 但不是抽象方法 只是执行的过程是其他语言写的 看不到
修饰类
用abstract修饰符修饰的类 叫做抽象类
抽象类不能直接做事,只能通过子类单继承来做事
2.类和类的关系
抽象类----直接单继承----抽象类 可以
抽象类----直接单继承----具体类 可以(用法通常不会出现)
具体类----直接单继承----抽象类 不可以(将父类的抽象方法具体化 或子类也变成抽象类
3.小问题
抽象类中能不能没有抽象方法 全是具体成员 可以
抽象类中能不能没有具体成员 全是抽象方法 可以--->抽象类抽象到极致 质的变化---->接口
接口可以理解为是抽象类抽象到极致--->依然还是一个类的结构 但不能用class修饰 改用interface修饰
什么是接口(通常是为了定义规则)
接口也是一个类的结构 只不过 用interface修饰 替换原有的class
1.有什么 成员
属性 不能含有一般属性 只能含有公有的静态的常量 Public static final
方法 不能含有一般方法 只能含有公有的抽象的方法(1.8 defualt修饰具体方法)
块 不能含有一般程序块 也不能含有static块(块本身就是具体的 接口中不让有具体成员)
构造方法 不能含有构造方法
2.如何使用 创建对象
不能创建对象
只能通过子类多实现(implements)来做事
public class A implements B,C,D{}
3.与别的类结构关系
接口不能继承别的类 最抽象
抽象类----直接多实现----接口 可以
具体类----直接多实现----接口 不可以(必须将接口中的抽象方法具体化 或者 具体类转化为抽象类)
*接口-----多继承-------接口 可以直接多实现
实例一:动物声音模拟器
package java期末测试题第八题;
public interface Animal {
public abstract void cry();
public abstract String getAnimalName();
}
package java期末测试题第八题;
public class Simulator {
public void playsound(Animal animal){
System.out.print(animal.getAnimalName()+"类声音:");
animal.cry();
}
}
package java期末测试题第八题;
public class Cat implements Animal{
//具体类是不能直接多实现接口的 所以必须将接口中的抽象方法具体化或者 具体类转化为抽象类
public void cry(){
System.out.println("小猫喵喵叫");
}
public String getAnimalName() {
return "猫";
}
}
package java期末测试题第八题;
public class Dog implements Animal{
public void cry() {
System.out.println("小狗汪汪叫");
}
public String getAnimalName() {
return "狗";
}
}
package java期末测试题第八题;
public class Test8 extends Simulator {
public static void main(String[] args) {
Simulator animal=new Simulator();
animal.playsound(new Dog());
animal.playsound(new Cat());
}
}