第十周总结 抽象类和接口

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());
		} 
	}
posted @ 2019-12-10 15:44  可惜她是水瓶座  阅读(106)  评论(0编辑  收藏  举报