java 抽象类 实例化

y85383 2016-10-02 10:58:13


问题:
1.抽象类为什么可以实例化?
2.抽象类中如果没有抽象方法,有什么意义?
...全文
671 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
大玉莞尔 2016-10-17
  • 打赏
  • 举报
回复
1.抽象类和接口都是不能被实例化的 抽象类主要体现了模板的设计模式,它里面的抽象方法都交给子类去实现。 实现了抽象类中抽象方法的子类可以被实例化。 2.抽象类中如果没有抽象方法,那就是一个普通的类(但是不能被实例化)。 所以定义的抽象类中一般都会包含抽象方法。
  • 打赏
  • 举报
回复
DemoClass d = new DemoClass();// DemoClass()是一个类,new DemoClass()();对象直接调用它里面的方法就可以啦。 比如: DemoClass d= new DemoClass(); d.printMessage("这是一个抽象类");
要有留白 2016-10-11
  • 打赏
  • 举报
回复
抽象类里面是没有实现方法的,简单说就是没有大括号{}!显然你定义的这个抽象类里面已经有实现方法了,所以严格来说已经不是抽象类了!抽象类在接口里会用到,因为在接口里的方法都是没有实现方法的,在使用接口时才会写具体实现方法,从而用相同的接口实现不同方法。
q15270860944 2016-10-11
  • 打赏
  • 举报
回复
能实例化是因为你已经实现了抽象方法的所有方法,因为你抽象方法没有定义方。
sky_08_06_02 2016-10-08
  • 打赏
  • 举报
回复
醉蝎目 2016-10-07
  • 打赏
  • 举报
回复
这个和匿名内部类很像,一般匿名内部类都是接口来声明的,然后再后面的块语句中实现接口的方法,虽然这个类没有抽象方法需要实现,但其实我觉得本质还是一个匿名内部类。接口比抽象类还要抽象,但是我个人理解,其实两者本质其实没有什么区别,都是一种规范,接口是为了弥补java不可以多继承的缺陷吧。这两个编程思想抽象的比较顶层的体现吧。我也是新人,提点意见,交流学习。
捏造的信仰 2016-10-04
  • 打赏
  • 举报
回复
引用 3 楼 y85383 的回复:
怎么知道DemoClass d = new DemoClass(){};这种方式定义的是匿名类?有没有什么例子
一个简单的例子:
public class AbstractClassAnonymousImplementation {

    public static void main(String[] args) {

        Worker laoWang = new Worker() {

            @Override
            int getSalary() {
                return 3000;
            }
        };

        System.out.println(
                "老王是一个月薪 " + laoWang.getSalary() + " 的 Worker");
    }
}

abstract class Worker {

    abstract int getSalary();
}
上面的例子中,变量 laoWang 是一个 Worker 对象,但它所属的类是一个 Worker 的匿名子类,该匿名类只在这条语句中用到了,不会再在别的地方用到。
y85383 2016-10-03
  • 打赏
  • 举报
回复
怎么知道DemoClass d = new DemoClass(){};这种方式定义的是匿名类?有没有什么例子
当作看不见 2016-10-02
  • 打赏
  • 举报
回复
能实例化是由于里面没有抽象方法,(所有的方法都已实现),也就是可以实例化,如果一个抽象类没有抽象方法,是没有意义的,(所以没人会这样玩)
上划线 2016-10-02
  • 打赏
  • 举报
回复
1、抽象类不能实例化 2、如果抽象类没有抽象方法,与普通类的区别就在于不能实例化 然后是为什么你的第一种方法,为什么可以“实例化抽象类”
引用
DemoClass d = new DemoClass(){};
其实这并不是实例化了DemoClass类,而是定义了一个DemoClass的匿名类,这个匿名类继承了DemoClass,实现了DemoClass的抽象方法。但是由于DemoClass类没有任何抽象方法,所以没有在大括号中写任何code就可以编译成功。 如果你将DemoClass类中的一个方法改为抽象方法,new DemoClass(){};就不能编译成功。这时候你就需要在大括号中实现new DemoClass(){};实现抽象方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧