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());
        }
    }
02-11 21:05