抽象类--java学习笔记

什麽是抽象类?

  • 在java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法
     

 认识抽象类

抽象类--java学习笔记_第1张图片

 抽象类的注意事项、特点

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 类该有的成员(变量、方法、构造器)抽象类都可以有
  • 最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
  • 一个类继承抽象类,必须完全重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类

使用抽象类的好处 

  • 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,设计这样的抽象类,就是为了更好的支持多态

示例:

需要设计猫和狗类,它们都有自己的名字,猫会喵喵叫,狗会汪汪叫

 抽象宠物类:

public abstract class Pet { //定义抽象类
    private String name;    //名字

    public abstract void cry(); //发出叫声方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

猫类:

public class Cat extends Pet {  //猫类,继承宠物抽象类
    @Override
    public void cry() { //重写方法
        System.out.println(getName()+":喵喵喵~");
    }
}

狗类:

public class Dog extends Pet{   //狗类,继承宠物抽象类
    @Override
    public void cry() { //重写方法
        System.out.println(getName()+":汪汪汪~");
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Pet c = new Cat();
        c.setName("武斗酷猫");
        c.cry();    //更好的支持多态

        Pet d = new Dog();
        d.setName("音速犬");
        d.cry();
    }
}

运行结果:

抽象类--java学习笔记_第2张图片

抽象类的常见应用场景:模板方法设计模式

模板 方法设计模式解决了什么问题?

  • 解决了方法中存在重复代码的问题

模板方法设计模式的写法

  • 定义一个抽象类
  • 在里面定义2个方法:一个是模板方法,把相同代码放进去,一个是抽象方法,把具体实现交给子类完成
  • 建议使用final关键字修饰模板方法,避免子类重写模板 

示例:

比如用模板方法设计模式完成刚才的问题

抽象宠物类:

public abstract class Pet { //定义抽象类
    private String name;    //名字

    public void cry(){  //模板方法
        System.out.print(getName()+"发出了");
        voice();    //主体部分交给子类完成
        System.out.println("的叫声");
    }

    public abstract void voice(); //发出叫声方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 猫类:

public class Cat extends Pet {  //猫类,继承宠物抽象类
    @Override
    public void voice() { //主体部分由子类确定发出什么声音
        System.out.print("喵喵喵~");
    }
}

狗类:

public class Dog extends Pet{   //狗类,继承宠物抽象类
    @Override
    public void voice() { //主体部分由子类确定发出什么声音
        System.out.print("汪汪汪~");
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Pet c = new Cat();
        c.setName("武斗酷猫");
        c.cry();

        Pet d = new Dog();
        d.setName("音速犬");
        d.cry();
    }
}

运行结果:

抽象类--java学习笔记_第3张图片

这个例题代码量太少可能看不出什么效果,当代码量多的时候就可以体现出减少重复代码的优势了 

你可能感兴趣的:(学习笔记,java,学习,笔记,面向对象,抽象类)