java抽象类(abstract)

(一)说到抽象类,那么什么是抽象类呢?来个生活中的例子了解一下。比如给一个父类名字是图形,那么他的子类可能会是正方形,三角形,圆形等等,那么像这样的子类他们的面积都能通过公式求出来。现在就给你一个问题让你求出父类图形的面积
1.首先明确一点叫做图形的父类是有面积的
2.只是你不知道是什么图形,所以我们就说父类图形是抽象的
3.子类给出的具体图形是具体的类

(二)
抽象类:抽象方法所在的类,必须是抽象类才行,在class之前写上abstract;
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束;
如何使用抽象方法和抽象类呢
1.不能直接创建new抽象对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类当中的所有的抽象方法(去掉abstract补上大括号)
4.进行使用创建子类对象使用

(三)下面来个例子,
定义一个抽象类Animal(动物),定义两个抽象方法eat(吃)和sleep(睡)。

package edu.edu.shengda3;

public abstract class Animal {     //抽象类
public abstract void eat();             //抽象方法1

public abstract void sleep();         //抽象方法2
}

这个时候注意正常来说需要定义一个具体的类来继承抽象类,那如果我偏不呢,这个时候可以再来一个抽象的子类Dog(狗)来继承父类Animal,子类复写父类中的方法

package edu.edu.shengda3;

public abstract class Dog extends Animal {
public void eat(){
    System.out.println("狗吃骨头");
}
}

到了这一步有人会说不是子类一定要继承父类的所用方法,才能运行成功吗?确实是这样的,但咱们可以继续深究一下。相对于Dog类,我们来两个具体的子类,二哈和金毛。这次Dog成了抽象的父类,二哈和金毛是两个具体的类。
二哈:

package edu.edu.shengda3;

public class Erha extends Dog {
public void sleep(){
    System.out.println("呼呼大睡");
}
}

金毛:

package edu.edu.shengda3;

public class Jinmao extends Dog {
public void sleep(){
    System.out.println("嘿嘿大睡");
}
 }

现在所有的的类都定义完了,来一个main方法,刚在第一点提到抽象类不能直接new,所以我们只能从具体类二哈和金毛下手:

package edu.edu.shengda3;

public class demomain {
public static void main(String[] args) {
    Erha e=new Erha();
    e.eat();
    e.sleep();
    System.out.println("=========");
    Jinmao j=new Jinmao();
    j.eat();
    j.sleep();
}
 }

输出结果如下:

在这里插入图片描述
再次强调:
1.抽象类不能创建对象
Animal an=new Animal();
Dog d =new Dog();//这样都是错误的
2.抽类中不一定要有抽象方法,但一定的是抽象类、
正如Dog代码所示
3.抽象类的子类必须覆写父类的所有方法,除非该子类也是抽象类,正如Dog代码中并没写完Animal中的所有方法,但是对于二哈和金毛这种具体的类必须覆写所有方法。

发布了15 篇原创文章 · 获赞 4 · 访问量 332

猜你喜欢

转载自blog.csdn.net/falaoxx/article/details/104649568