前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java abstract 关键字 抽象方法和抽象类的使用详解

java abstract 关键字 抽象方法和抽象类的使用详解

作者头像
用户7886150
修改2021-04-07 11:37:19
8380
修改2021-04-07 11:37:19
举报
文章被收录于专栏:bit哲学院

参考链接: Java抽象类和抽象方法

java abstract 关键字 抽象类 抽象方法 的使用详解

 1.关键字2.抽象类3.抽象方法4.abstract不能用来修饰属性、构造器、private、final、static

1.关键字 

关键字abstract:抽象的,可以用来修饰类、修饰方法 

2.抽象类 

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征,有时将父类设计得非常得抽象以至于它没有具体的实例,这样的类就叫做抽象类。也可以总结为:抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。抽象类使用需注意的点 ①不可被实例化 ②抽象类有构造器(凡是类都有构造器) ③抽象方法所在的类,一定是抽象类 ④抽象类中可以没有抽象方法。 

3.抽象方法 

抽象类中只表明方法,没有方法体的方法,主要用于声明方法功能,交由子类去重写(覆盖),实现去其功能。抽象方法使用需注意的点 ①格式:没有方法体,包括{};如:public abstract void eat(); ②抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法 ③若子类继承抽象类,并重写了所有的抽象方法,即这个子类是一个“实体类”,即可以实例化 ④若子类继承抽象类,没有冲写所有的抽象方法,意味着子类仍有抽象方法,则声明必须为abstract的! 3.demo 

public class TestAbstract {

    public static void main(String[] args) {

//        Person p1 = new Person();

//        p1.eat();

        Student s1 =  new Student();

        s1.eat();

        Person p = new Student();//多态

        p.eat();

    }

}

abstract class Person{

    String name;

    public abstract void eat();

    public abstract void walk(); 

    public Person() {

    }

    //不是抽象方法!只是没有方法体

    public void sleep() {

    }

    public Person(String name) {

        this.name = name;

    }

}

class Student extends Person{

    public void eat() {

        System.out.println("student eat");

    }

    public void walk() {

        System.out.println("student walk");

    }

}

abstract class Worker extends Person{

    public void eat() {

        System.out.println("worker eat");

    }

//    public void walk() {

//        System.out.println("worker walk");

//    }

}

4.abstract不能用来修饰属性、构造器、private、final、static 

dome 

abstract class A{

//    对于类来讲,它能够实例化,因为它有构造器,对于方法来讲,它能够被子类重写。

//    但在多态中的体现,并不包括属性,具体调取属性的,看的是引用是什么,属性无法覆盖。

//    abstract int name; 

//    public abstract A() {

//    //因为构造器不能被重写    

//    }

//    private abstract void method1();//子类不能覆盖父类中声明为private的方法

//    public abstract final void method1();//一个不让重写,一个又让重写,所以本身本来就矛盾

//  类方法可以类还没有实例化的时候调用,但abstract修饰的本身就没有方法体    

//    public abstract static void method3();

}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档