一、抽象类
1.概念:使用abstract关键字修饰的类
2.特点:
成员变量:可以定义常量,也可以定义变量
构造方法:存在无参构造,也存在无参构造
成员方法:可以是抽象方法,也可以是非抽象方法(抽象方法不能定义为private)
抽象方法: 就是在定义方法的时候,只是方法声明 ,没有方法体{} ,在一个抽象类中定义一个抽象方法,abstract不能省略!
注意:
1.抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
2.抽象类不能直接实例化,但是可以通过子类进行实力话
3.抽象类的子类需要重写父类的抽象方法
abstract class Animal{
// 抽象方法
public abstract void eat() ;
//非抽象方法
public void show() {
System.out.println("show Animal");
}
}
public class Dog extends Animal{
public void eat(){
System.out.println("吃骨头");
}
}
public class Test{
public static void main(String[] args){
Animal animal = new Dog();//只可以用多态的方法用子类进行实例化
}
}
3.abstract和哪些关键字冲突
- private :冲突
- static:冲突
- final:冲突的
二、接口
**1.概念:**体现的是一种扩展功能,需要让它子实现类实现该功能即可!
- 关键字: interface
2.特点:
成员方法:只能是常量
构造方法:没有构造方法!
成员方法:必须是抽象方法,定义的时候默认修饰符public abstract(可以省略不写)
//跳高接口
public interface Jump{
public abstract void jump() ;
}
// 创建子实现类实现跳高接口
public class Cat implements Jump{
@Override
public void jump() {
System.out.println("猫可以跳高");
}
}
注意:接口不能实例化
接口的实例化动作需要借助于当前实现该接口的具体的实现类来完成
格式:
接口名 对象名 = new 子实现类名() ;
public class InterfaceDemo {
public static void main(String[] args) {
//Jump jump = new Jump() ;报错!接口欧类型不能实例化
//接口的子实现类是具体类
Jump jump = new Cat() ;
jump.jump();
}
}
三、接口和抽象类的区别
1.成员区别
抽象类的成员特点
*成员变量:可以常量,也可以是变量
*成员方法:可以抽象方法,也可以是非抽象方法!
*构造方法:存在有参/无参构造, 对数据进行初始化
接口的成员特点
*成员变量:只能是常量,存在默认修饰符:public static final
*成员方法:只能是抽象方法,存在默认修饰符:public abstract
*构造方法:没有,通过子实现类进行实例化
2. 关系区别.
*类与类:
存在继承关系,只能单继承,不能多继承,但可以多层继承;
*类与接口:
存在实现关系,一个类可以多实现多个接口;
并且一个类继承另一个类的时候,也可以实现多个接口。
*接口与接口:
存在继承关系,不仅可以单继承,还可以多继承。
3. 设计区别.
*抽象类:继承,提高代码的复用性,体现一种“is-a”的关系。
*接口:实现,提高代码的扩展性,体现一种“like-a”的关系。