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) {
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方法释放了锁,使得敏感词线程可...