a a=new b java_Java中A a;和B b=new B();的区别

Java中A a;和B b=new B();的区别

关注:208  答案:5  mip版

解决时间 2021-01-29 20:25

e6cb1a03ad541b3098697807b7bf1798.png

提问者祇為焄菂兲哋閤

2021-01-29 16:36

如果A是抽象类,抽象类不是不能创建对象吗,那a又是什么?有点乱!求大神。。。

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家相忘于江湖

2021-01-29 17:41

区别:

1、前者是类A,后者是类B;

2、前者是变量a,后者是变量b;

3、前者没有实例化,后者进行了实例化;

解释:

1、A a是定义一个类变量,类名是A,变量名是a

2、B b=new B();

可以看做

B b;//定义一个类变量,类名B ,变量名b

b = new B();//实例化B,并赋值给b

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼縱马獨歸

2021-01-29 20:52

a b=new b():

因为b类是a类的子类,所以上面语句发生了向上转型. new b()会在堆内存中产生一个b类的实例,

a b会在栈内存中产生一个a类的引用.

a b = new b()会让b指向堆内存中的new b()实例,但是该实例时b类的实例,这是就会发生向上转型.

如果子类中存在和父类相同名称和参数的方法,这种情况叫做多态性,子类覆写父类方法,

发生向上转型后,调用这种被子类覆写过的方法,那么会直接调用类b的方法show().

e6cb1a03ad541b3098697807b7bf1798.png

2楼久愛不厭

2021-01-29 20:06

可以被实例化

抽象类的特点:

1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。

2、允许(但不要求)抽象类包含抽象成员。 3、抽象类不能被密封。 当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写哪些抽象成员。在下边的示例中: abstract class A{ public abstract void F();} abstract class B: A{ public void G() {}} class C: B{ public override void F() { // actual implementation of F }} 抽象类 A 引入抽象方法 F。类 B 引入另一个方法 G,但由于它不提供 F 的实现,B 也必须声明为抽象类。类 C 重写 F,并提供一个具体实现。由于 C 中没有了抽象成员,因此可以(但并非必须)将 C 声明为非抽象类。抽象类里面其实可以声明普通的方法的,既然可以声明那就肯定可以用,你说呢

e6cb1a03ad541b3098697807b7bf1798.png

3楼怼你笑纯属礼貌

2021-01-29 19:40

抽象类是不能创建实例,但是可以声明一个指向子类实例的引用,这个是向上转型的内容你可以搜一下。

e6cb1a03ad541b3098697807b7bf1798.png

4楼距离和很远

2021-01-29 18:16

A a;并没有创建对象,只是声明了一个A类型的引用,但此时并没有引用任何A的实例。

而B b = new B();则既声明了类型为B的引用,有创建了B的实例,并且将b引用了B的实例对象。

如果A是抽象类,那么A a = new A();就不可以,主要是后面的new A();不允许,因为里面包含了抽象方法。

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值