美文网首页
java 抽象类“实例化”

java 抽象类“实例化”

作者: huapro | 来源:发表于2019-05-18 23:06 被阅读0次

一、抽象(abstract)的使用

当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。

我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。

例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。

package javastudy;

public class AbstractDemo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }
}

// 这就是一个抽象类
abstract class Animal {
    String name;
    int age;

    // 动物会叫
    public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
}

// 抽象类可以被继承
// 当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。
class cat extends Animal {
    // 实现父类的cry抽象方法
    public void cry() {
        System.out.println("猫叫:");

    }
}

二、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

三、抽象方法不能有方法主体。格式如下:
abstract void xxx();

四、抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了

五、抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。

六、一旦类中包含了abstract方法,那类该类必须声明为abstract类。

毋庸置疑,抽象类是不可以实例化,抽象类不像具体类那样描述一个具体的事物,它是提取具有相似性具体事物的公共特征的抽象,实现它也没有任何意义。

如果不继承抽象类,而是“实例化”抽象类,写法如下:

package subClass;
abstract class ParentClass {
    public abstract void abstractFun();
}

class SubClass {
    //此处"实例化"ParentClass 是实例化 ParentClass(){},并实现ParentClass的抽象方法,因此抽象类是不可以实例化的
    ParentClass parentClass=new ParentClass(){
        @Override
        public void abstractFun() {
            System.out.println("abstractFun()");
        }
    };
    
}

public class TestExtends {
    public static void main(String args[]){
        SubClass sub=new SubClass();
        sub.parentClass.abstractFun();
    }
}

实例化"ParentClass 是new ParentClass(){},并实现ParentClass的抽象方法,而不是 newParentClass()。

以上结构和Android事件监听相似:

findViewById(R.id.stop_Button).setOnClickListener(new View.OnClickListener() {
   @Override 此处省略 @Override 时 请勿以为是内部类。
   public void onClick(View v) {
stopService(it);
}
});

抽象类特征:
  非抽象类继承抽象类必须实现抽象类的抽象方法;

java匿名内部类的使用 (比如new对象后的大括号, List list = new ArrayList() { { }}这用用法等)https://blog.csdn.net/shenhaiyushitiaoyu/article/details/84142618

相关文章

网友评论

      本文标题:java 抽象类“实例化”

      本文链接:https://www.haomeiwen.com/subject/eeixzqtx.html