相关文章推荐
闯红灯的手术刀  ·  rust ...·  1 年前    · 
被表白的小笼包  ·  Comparative study of ...·  1 年前    · 
很拉风的水煮肉  ·  Acoustic emissions of ...·  1 年前    · 
public abstract class AbstractFruit {
    public AbstractFruit(){
        System.out.println("我是Fruit的抽象类,我被实例化了");
    public abstract void say();

使用main方法进行测试

public class Test {
    public static void main(String[] args) {
        AbstractFruit abstractFruit = new AbstractFruit();

这段测试代码编译报错了,意思就是AbstractFruit是抽象的不能被实例化,也就是说无法通过new的方式实例化。
编译报错
那到底抽象类能不能实例化?我们写一个Orange继承AbstractFruit,代码如下:

public class Orange extends AbstractFruit {
    public Orange() {
        System.out.println("我是Orange类,我被实例化了");
    @Override
    public void say() {
        System.out.println("我是一个Orange");

main方法测试

    public static void main(String[] args) {
        Orange orange = new Orange();

测试结果如下:

我是Fruit的抽象类,我被实例化了
我是Orange类,我被实例化了

说明,子类Orange 实例化的时候把抽象类AbstractFruit也实例化了。
那么还有其他方式实例化抽象类吗?答案是有。
可以通过如下这种生成匿名类的方式去实现抽象类的构造。

    public static void main(String[] args) {
//        Orange orange = new Orange();
        AbstractFruit abstractFruit = new AbstractFruit() {
            @Override
            public void say() {
                System.out.println("大家好我是abstractFruit");
        abstractFruit.say();

打印结果如下:

我是Fruit的抽象类,我被实例化了
大家好我是abstractFruit

什么是抽象类?
答:由abstract修饰的类叫抽象类。抽象的抽去了子类的公有的方法或者属性。
抽象类能不能被实例化?
答:不能。抽象类不是具体的类,无法通过new的方式实例化,但是可以通过子类的构造方法间接实例化,也可以通过生成匿名类的方式来实现。

文章目录问题测试总结问题什么是抽象类?抽象类能不能被实例化?测试创建一个AbstractFruit抽象类public abstract class AbstractFruit { public AbstractFruit(){ System.out.println("我是Fruit的抽象类,我被实例化了"); } public abstract v... 问题一:什么是抽象类抽象类Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和抽象方法,该类不能够进行实例化(这个在后面进行解释)因为抽象类不能直接实例化,所以必须需要有实现子类。 问题二:为什么要有抽象类抽象类是介于接口与普通类之间的一种结构,接口中定义的都是抽象方法,而类中都是普通方法。当我们存在一类事物,他们大多数结构和功能存在雷同,只有少部分存在不同,如果我们直接使用子类实现接口 Socket socket = new Socket("127.0.0.1",9000); OutputStream outputStream = socket.getOutputStream(); 很显然OutputStream是一个抽象类,则=右边应该是OutputStream的一个子类。然而socket.getOutoutStream()返回类型也是OutputStream类型的。这一看似不符合语法要求的写法其实是没有问题的。
在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化” 如果只是想单纯的理解,那么意思就是你画了一个有四条边的图形你说是矩形 但是这是不可以的,为什么?因为矩形还有一个条件就是要四个内角是直角 其中画有四条边的图形就是抽象类,矩形就是实例化 如果理解了含义但是不懂代码中的定义,那么那么就百度百度定义!定义真的很重要! 抽象类定义: 含有纯虚函数的类称为抽象类 最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用new,编译器都过不去。但是他说,考官说可以,用匿名内部类实现。听见这个回到,我感觉那个考官太………,有点无语。我们可以仔细分析下这个问题。 直接new接口和抽象类 首先先明确一点,直接new接口和抽象类,这肯定行不通,编译器会提示Cannot instan...
抽象类无法实例化,无法创建对象。现实生活中也有抽象类的类子,比如说人类是一个抽象类,无法创建一个叫人类的对象,人继承人类来创建对象。况且抽象类中的抽象方法只有声明,没有主体,如果实例化了,又如何去实现调用呢? sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可...