package com.lesson9.example;
/**
* 了解abstract
* */
/**
* 关键字【abstract】:可以用来修饰类和方法
* 1.abstract修饰的类叫做抽象类(abstract class),该类不能被实例化,即不能使用关键字new创建该类对象
* 2.abstract修饰的方法叫做抽象方法
(
public abstract void
)
,抽象方法只有声明部分,而没有具体的方法体{……}
* */
/**
* 【注意】
* 1.抽象类不能实例化(new),抽象方法只有声明部分,没有具体的方法体;
* 2.抽象类中可以没有抽象方法,但是抽象方法必须出现在抽象类中(有抽象方法的一定是抽象类);
* 3.抽象类只计划子类具有的功能,而不实现子类的具体功能;
* 4.如果一个非抽象类是一个抽象类的子类,它必须实现父类的所有抽象方法。
* */
abstract class Animal{
String type = "哺乳动物";
/*public abstract void run(){}* 报错,抽象方法只有声明部分,没有具体的方法体,因此抽象方法也没有花括号*/
//抽象方法只能出现在抽象类中public abstract void run();//抽象类中可以有抽象方法和非抽象方法,而且抽象类中也可以没有抽象方法protected void eat(){
System.out.println(type + "吃...");
}
}
class Cat extends Animal{
String type = "猫";//非抽象类继承抽象类,必须实现父类中所有抽象方法public void run(){ //子类实现父类抽象类时,需要实现具体的功能(具体的方法体),因此不需要abstract修饰
System.out.println(type + "在跑...");
}
}
public class AbstractExample {
public static void main(String[] args){Animal a = new Cat();a.run();}
}
package com.lesson9.example;
/**
* 了解接口
* */
/**
* 关键字【interface】:定义接口
* 1.当一个抽象类中的方法都是抽象方法时,可以使用关键字interface将其定义为接口
* --->interface <接口名> {声明抽象方法}
* 2.接口的作用:实现多重继承
* --->在java中一个类只能有一个父类,如果某个类需要继承多个类的变量或者方法,可以通过接口实现。
* java提供接口方式,一个类可以实现多个接口,从而获得多重继承的特性。(相当于继承多个抽象类吧?)
* 3.接口中的方法都是默认公有抽象的(public abstract),声明抽象方法只需要返回类型和抽象方法名称就行
* */
/**
* 关键字【implements】 :实现接口
* 1.当一个类实现某个接口时,需要使用关键字implements(Implements是复数形式,莫忘记)
* ---->class 类名 implements <接口名>, <接口名>, ... {}
* 2.在类中实现接口的方法时,方法的名称、返回类型、参数个数和参数类型必须与接口中的方法一致
* 3.如果一个类实现了接口,但是没有实现接口中的所有方法,那么这个类必须是抽象类。
* 只有抽象类可以不实现接口中所有的方法,即非抽象类必须实现接口中的所有方法
**/
interface Cats{
//猫科动物
//接口中的方法都是默认公有抽象的(public abstract)/*public abstract*/ void eat(); //接口中声明抽象方法只需要返回类型和抽象方法名称就行
}
/**
* 接口的访问级别:
* 1.public interface <接口名>{……} 声明接口是公有接口,则可以被任何一个类使用
* 2.interface <接口名>{……} 默认接口是友好的,只能被同一包中的类使用
* */
class Lion extends Mammal implements Cats{
//Lion既有Mammal的特性,也有Cats的特性(相当于多继承)
//非抽象类必须实现接口中所有方法
public void run(){ }public void eat(){ } // 方法的名称、返回类型、参数个数和参数类型必须与接口中的方法一致(去掉abstract)
}
package com.lesson9.example;
/**
* 了解抽象类和接口的区别
* */
/*抽象类*/
/**
* 【关键字】abstract
* 【成员变量】
可包含任意成员变量(包括各种访问级别的类成员变量和实例成员变量)
* 【方法】
可包含任意方法(包括各种访问级别的类方法和实例方法、抽象方法和非抽象方法)
* 【使用】抽象类可以被继承(关键字extends),一个类只能继承一个父类
* */
/*接口*/
/**
* 【关键字】interface
* 【成员变量】
只能包含公开的静态常量(默认由public static final修饰)
* 【方法】
只能包含公开且抽象的方法(默认由public abstract修饰)
* 【使用】接口可以被实现(关键字implements),一个类可以实现多个接口
* */
public class Compare {
//总结:
//抽象类可以使用任意成员变量和方法
//接口有限制,必须使用公开静态的成员变量(必须是常量)和公开且抽象的
方法(必须是抽象方法)
}