自学内容网 自学内容网

Java 抽象类

1. 认识抽象类

        (1) 在Java中有个关键字叫:abstract,他是抽象的意思,可以用它修饰类、成员方法

        (2) abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法(//抽象方法:必须使用abstract修饰,不能有方法体)

        修饰符 abstract class 类名{

               修饰符 abstract 返回值类型 方法名(形参列表); 

        }

//抽象类
public abstract class A {
    
    //抽象方法:必须使用abstract修饰,不能有方法体
    public abstract void show();
}

        (3) 注意事项:

                ① 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

                ② 类该有的成员(成员变量、方法、构造器)抽象类都可以有

                ③ 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类、让子类继承实现。

                ④ 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

        

//抽象类
public abstract class A {

    //成员变量
    private String name;

    //抽象方法:必须使用abstract修饰,不能有方法体
    public abstract void show();

    //构造器
    public A() {
    }

    public A(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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


public class B extends A{

    //一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
    @Override
    public void show() {

    }
}


 public static void main(String[] args) {

        //抽象类不能创建对象
        //A a = new A();
    }

2. 使用抽象类的好处

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

//定义一个动物的抽象类 由于每个动物的叫法不同将叫设置成抽象方法 以便每个动物对象去实现
public abstract class Animal {
    private String name;

    public abstract void jiao();

    public String getName() {
        return name;
    }

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


//动物猫
public class Cat extends Animal {

    @Override
    public void jiao() {
        System.out.println("小猫喵喵");
    }
}



//动物狗
public class Dog extends Animal{
    @Override
    public void jiao() {
        System.out.println("小狗往往");
    }
}


public static void main(String[] args) {
        Animal a = new Cat();
        a.setName("多比");
        a.jiao();//小猫喵喵

        Animal b = new Dog();
        b.setName("大锤");
        b.jiao();//小狗往往
    }

3. 常见的应用场景

        模板方法设计模式:解决方法中存在重复代码的问题

        模板方法--使用final修饰:模版防止被子类重写

public abstract class Animal {

    //模版方法 动物描述 --使用final修饰:模版防止被子类重写
    public final void descr(){
        System.out.println("我最喜爱的动物");
        System.out.println(write());
        System.out.println("这就是我最喜爱的动物,纽币不");
    }

    //抽象方法 每个动物不一样
    public abstract String write();
}

//动物狗
public class Dog extends Animal {


    @Override
    public String write() {
        return "狗,是食肉目犬科犬属哺乳动物,别称犬,与马、牛、羊、猪和鸡并称“六畜”。狗的体型大小、毛色因品种不同而不同,体格匀称";
    }
}


//动物猫
public class Cat extends Animal {


    @Override
    public String write() {
        return "猫(拉丁学名:Felis silvestris catus),是食肉目猫科猫属的脊索动物。猫体型小,体色由蓝灰色到棕黄色,体型瘦削,身长0.3-0.5米,别称“虎舅”";
    }
}



   public static void main(String[] args) {
        //抽象类的常用场景之一:经常用来设计模版方法设计模式
        Cat cat = new Cat();
        cat.descr();//我最喜爱的动物
        //猫(拉丁学名:Felis silvestris catus),是食肉目猫科猫属的脊索动物。猫体型小,体色由蓝灰色到棕黄色,体型瘦削,身长0.3-0.5米,别称“虎舅”
        //这就是我最喜爱的动物,纽币不

        Dog dog = new Dog();
        dog.descr();//我最喜爱的动物
        //狗,是食肉目犬科犬属哺乳动物,别称犬,与马、牛、羊、猪和鸡并称“六畜”。狗的体型大小、毛色因品种不同而不同,体格匀称
        //这就是我最喜爱的动物,纽币不
    }


原文地址:https://blog.csdn.net/zeijiershuai/article/details/144437230

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!