乐趣区

关于java:Java学习笔记抽象类

最近在学习 Java,谈一下学习中对抽象类的了解,如有谬误与还请大佬斧正。

在 Java 继承中会有子类与超类之分。超类与子类能够说是个别与非凡,形象与具体的关系。比方水果与香蕉,人与学生,汽车与红旗,手机与华为等。

在这里以 Dog 类与 Bird 类举例,每个动物都会有本人的名字或者品种,因而咱们能够引入一个公共的超类,能够把 Dog 类与 Bird 类中反复的办法放在继承档次中更高的一层。另外,咱们能够在公共的超类中增加一个 getDescription 办法,它能够进行一个动物的简要形容。此时咱们设置一个超类 Animal。

然而在 Animal 中只理解到动物的名字,对于其余的形容无所不知,该如何设定 getDescription 办法呢?此时能够应用 abstract 关键字,这样就齐全不须要实现这个办法, 把具体的实现代码留给子类中去实现。

public abstract class Animal
{
    /*.....*/
    public abstract void getDescription();// 形象办法}
 为了进步程序的清晰度,蕴含一个或多个形象办法的类自身必须被申明为形象的。如 Animal 中,getDescription() 办法是形象的,那么该类必须也被申明为形象的。抽象类除了蕴含形象办法,也能够蕴含一些具体的字段和具体的办法。

public abstract class Animal
{
    private String name;
    public Animal(String _name)
    {this.name=_name;}
    public String getName()
    {return this.name;}
    public abstract void getDescription();// 形象办法}

   通过扩大形象 Animal 类,并实现办法 getDescription 类来定义 Dog 类与 Bird 类,此时因为在 Dog 与 Bird 类中不再含有形象办法,所以不须要将其申明为抽象类。

    即便不含形象办法,也能够将类申明为抽象类。

    抽象类是不能实例化的,但能够创立一个具体子类的对象.
   

Animal dog1 = new Animal("小黑");// 谬误的申明
 
Animal dog1 = new Dog("小黑","汪汪汪","阿拉斯加");
// 这里的 dog1 是一个形象类型的 Animal 变量, 援用了一个非形象子类 Dog 的一个实例 

下面试测试代码。

public abstract class Animal
{
    private String name;
    public Animal(String _name)
    {this.name=_name;}
    public String getName()
    {return this.name;}
    public abstract void getDescription();// 形象办法}

public class Bird extends Animal
{
    private String color;
    private int age;
    public Bird(String _name,String _color,int _age)
    {super(_name);
        color = _color;
        age = _age;
    }
    @Override
    public void getDescription()
    {System.out.println("年龄为"+age+color+"色彩的"+getName()+"在地面翱翔");
    }
}

public class Dog extends Animal
{
    private String call;
    private String kind;
    public Dog(String _name,String _call,String _kind)
    {super(_name);
        call=_call;
        kind=_kind;
    }
    @Override
    public void getDescription()
    {System.out.println(getName() + "的品种是"+kind+"能够" + call);
    }
}
public class Test
{public static void main(String[] args)
    {var animal = new Animal[2];
        animal[0] = new Dog("小哈","汪汪汪","哈士奇");
        animal[1] = new Bird("小红","红",5);
 
        for(Animal a : animal)// 应用了形象办法, 能够间接从变量 a 中调用 getDescription 办法
            a.getDescription();}
}
退出移动版