javase -- 抽象类和抽象方法


abstract

抽象的

  • 可以修饰方法
  • 不能用于修饰 私有方法 (因为我们需要重写方法的)
  • 不能用于修饰静态方法(子类与父类同名同参的static方法不叫重写
  • 不能用于修饰final方法(不能被重写)

抽象类.

权限修饰符 abstract class A{}

权限修饰符:默认 、public

  • 不能被实例化(不能造对象)
  • 有构造器,便于子类实例化时调用

抽象方法.

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

权限修饰符除了 private

  • 只有方法声明,没有方法体
  • 包含抽象方法的类一定是抽象类
  • 若子类,重写了抽象类所有的抽象方法才可以实例化
  • 若子类,没有完全重写抽象类所有的抽象方法,则这个子类仍然是抽象类

拓展.

抽象类的匿名子类.

//抽象类
public abstract class Person {
    public abstract void work();

    public void rest() {
        System.out.println("休息一会儿");
    }

    public static void main(String[] args) {
        /*
         * 匿名对象:没有对象引用指向的对象
         * 抽象类的匿名子类:用抽象类名代替子类名,无需构建子类(像men)
         * 
         */

        System.out.println(new Men());//非匿名类的匿名对象 (Person类(抽象类的非匿名子类的匿名对象))

        Men m = new Men();//非匿名类的非匿名对象 (Person类(抽象类的非匿名子类的非匿名对象))
        System.out.println(m);

        //抽象类的匿名子类的非匿名对象
        // 我们不能说 new Person是一个父类的对象(因为父类(抽象类)无法被实例化)
        // 只能认为Person p = new Person 是Person的匿名子类的非匿名对象
        Person p = new Person() {
            @Override
            public void work() {

            }
        };

        //抽象类的匿名子类的匿名对象
        new Person() {
            @Override
            public void work() {

            }
        };
    }
}

class Men extends Person{
    @Override
    public void work() {
        System.out.println("拧一百个螺丝");
    }

    @Override
    public String toString() {
        return "Men [" + hashCode() + "]";
    }    
}

文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
javase -- 模板方法设计模式 javase -- 模板方法设计模式
模板方法设计模式(抽象类的应用).解决的问题. 当功能(方法)内部一部分实现是确定的,一部分实现是不确定的(易变的)。这时可以把不确定的部分暴露出来,让子类去实现 常用 数据库访问的封装 Junit单元测试 JavaWeb的Servlet中
2020-07-30
下一篇 
javase -- JUnit使用要求 javase -- JUnit使用要求
JUnit使用要求.1.对类的要求. 公共的 public修饰的 有个无参构造器 2.对测试方法编写的要求. 需要在方法前加注解@Test 公共的public修饰的 没有返回值类型 void 无参 非静态
2020-07-30
  目录