JAVA学习基础(抽象类和接口)

Java面向对象(抽象类)

抽象类概念
在Java中一个没有方法体的方法定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。抽象类可以没有抽象方法,但是有抽象方法的一定是抽象类。

抽象类特点
1. 抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
2. 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
3. 抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?
用于子类访问父类数据时的初始化
4. 抽象类不能直接实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
5. 抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法

抽象类的成员特点

成员变量:既可以是变量,也可以是常量
构造方法:用于子类访问父类数据的初始化
成员方法:既可以是抽象的,也可以是非抽象的

抽象类的成员方法特性:
抽象方法 强制要求子类做的事情
非抽象方法 子类继承的事情,提高代码复用性

等下和接口一起举例

Java中接口

接口的概念和特点
接口的概念是要把一些类的中特殊的存在写出来的方法,就是将类中额外的功能实现。
接口的特点:
1.接口用关键字interface表示,格式:interface 接口名 {}
2.接口类用implements表示 格式:class 类名 implements 接口名{}
3.接口不能实例化。他只能按照多态的方式来实例化。
4.接口的子类:
可以是抽象类,但是没有意义。
可以是具体类,但是要对接口中的方法进行重写。
接口的成员特点
成员变量
只能是静态常量默认修饰符public static final
构造方法
接口没有构造方法
成员变量
只能是抽象方法
默认修饰符 public abstract

注意:类与类只能单继承,但是类与接口可以多个接口,就是多继承。接口与接口也支持多继承

抽象类与接口的区别

抽象类成员变量可以是变量,但是接口只能是常量。
抽象类有构造方法
抽象类成员方法可以是非抽样方法
抽象类体现的是is a的关系,抽象类中定义的是该继承体系的共性功能,接口实现的是 like a的关系,定义的是该继承体的扩展功能

举个例子

public class Test {
    public static void main(String[] args) {
        Animal an = new Dog();
        an.name = "Tom";
        an.age = 5;
        System.out.println("name:"+an.name+"==age:"+an.age);
        an.Run();
        Dog dog = (Dog) an;
        dog.jump();
        an = new Cat();
        an.name="大脸猫";
        an.age = 3;
        System.out.println("name:"+an.name+"==age:"+an.age);
        an.Run();
        ((Cat) an).jump();
    }
}

abstract class Animal {
    String name;
    int age;

    abstract void Run();
}
interface Jump{
    void jump();
}
class Dog extends Animal implements Jump{
   public void Run(){
       System.out.println("跑步");
    }

    @Override
    public void jump() {
        System.out.println("Tom学会了跳高");
    }
}
class Cat extends Animal implements Jump{

    @Override
    void Run() {
        System.out.println("跑步");
    }

    @Override
    public void jump() {
        System.out.println("大脸猫学会了跳远");
    }
}

输出结果:
JAVA学习基础(抽象类和接口)_第1张图片

你可能感兴趣的:(JAVA学习与基础知识,面型对象)