Java基础:抽象类

前言:

在前面已经又博文介绍过 继承 相关的知识,抽象类可以说是在继承基础上的进一步深化。
通过继承,我们了解到:
1、多个子类中拥有相同的方法:将其提取到父类中,再继承即可。
2、多个子类的方法 各不相同: 各自处理,不要在父类中放。
那么: 多个子类的方法 方法名(方法标签)相同,但方法体不同,有什么更好的方法进行处理吗?
答案是有的: 抽象方法。

继承:继承不了解的可以戳我哦

抽象方法与抽象类:

在说抽象类之前先来介绍一下 抽象方法,以及什么时候更好的选择用抽象方法。
介绍之前先看一段代码:

Pet.java (父类):

package pat;

public class Pet {
    private String name;
    private int love;
    private int health;

    public String getName() {
        return name;
    }

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

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
}

Dog.java(子类):

package pat;

public class Dog extends Pet{

    private String Strain;

    public String getStrain() {
        return Strain;
    }

    public void setStrain(String strain) {
        Strain = strain;
    }

    public void print() {
        System.out.println(getName() + " " + getLove() + " " + getHealth() + 
        " " + this.Strain);
    }

}

Cat.java(子类):

package pat;

public class Cat extends Pet{

    private String sex;


    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void print() {
        System.out.println(getName() + " " + getLove() + " " + getHealth() + 
        " " + this.sex);
    }
}

通过上面的代码我们可以发现,在两个子类中就有我们前言中提到的问题:
看一下 print() 方法, 两个子类中 方法名相同,但是方法里面的内容有所不同。
这个时候就可以用抽象方法啦,具体实现如下:

抽象方法必须在抽象类中进行定义,所以在写抽象方法时必须是一个抽象类,但抽象类中可以没有抽象方法。
抽象类中可以有抽象方法也可以有普通方法.

package pat;

public abstract class Pet {
    private String name;
    private int love;
    private int health;

    public String getName() {
        return name;
    }

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

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
    
    public abstract void print();
    
    
}

子类要继承父类就必须要重写父类中的抽象方法,即将 父类中的抽象方法进行实现,也可以不实现,
必须要有,这样的好处是什么呢?
相当于老总给两个人分配了一个任务,只说了题目,剩下的你就可以自由发挥啦。
在实际开发项目中,肯定是先有一个大致的框架,然后再进行慢慢实现(个人理解)

抽象类不能进行实例化:

	有两个原因:
	1、语法要求,当你进行实例化时,是会报错的。
	2、实例化没有太大的意义,抽象类中的抽象方法是没有内容的,实例化所调用的抽象方法没有内容
	那调用它做什么呢,你可能会想,那普通方法呢?抽象类一般用于继承中,子类既然继承父类啦,
	父类的方法子类就可以直接用啦,只要我的儿子可以好,我累点我所谓(可怜天下父母心)

猜你喜欢

转载自blog.csdn.net/qq_43619271/article/details/106241682
今日推荐