JAVA抽象类的this一个问题

比方说这个代码publicabstractclassAnimal{privateintage;publicAnimal(){}publicAnimal(intage){t... 比方说这个代码
public abstract class Animal {
private int age;
public Animal(){

}
public Animal(int age){
this.age=age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();
}
听老师讲:在抽象类中不可以使用this关键字,原因是由于该类为抽象类,既然是抽象类就不可以获取该类的实例对象.
那么为什么setName方法里面可以用this?
展开
 我来答
乌光QS
2012-09-13 · TA获得超过1365个赞
知道小有建树答主
回答量:464
采纳率:100%
帮助的人:442万
展开全部
抽象类中照样可以用this。this就是当前对象,当前对象既然已经实例化了,它当然不会直接是此抽象类(类A)的实例,而是一个继承这个抽象类的类(类B)的实例。这个实例里有一部分是由类A刻画的,有一部分是由类B刻画的,无论类B是什么,这个实例由类A刻画的那部分里总是有age这个属性的,this.age就是指这个实例里的age属性。

“抽象类就不可以获取该类的实例对象”这话其实是错的,抽象类固然不能有直接的实例,但是完全可能有实例就是这个抽象类型的。
百度网友3ae3389
2012-09-13 · TA获得超过249个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:107万
展开全部
抽象类可以有是可以有构造方法的但是意义不大,抽象类也可以有实现的属性和方法。
在一个类中有抽象方法,那么这个类一定是抽象类 所以this可以出现在抽象类中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guaishang
2012-09-13 · TA获得超过126个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:88.6万
展开全部
抽象类不能用this是因为抽象类不能被实例化,所以没有当前的对象即this。而setName中得this是给其属性赋值,是它本身的一种机制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
脚本号1c
2012-09-13
知道答主
回答量:11
采纳率:0%
帮助的人:3.4万
展开全部
抽象类与普通类不同之处在于其有抽象方法
至于别的方法,和普通类一样。
在上面的代码中:只有 public abstract void eat();是抽象方法。
至少本类中的别的方法和普通类一样,所以this仍然有效。
准确的说:抽象方法是不会用到this关键字,因为它的方法是不在当前实现,所以没写实现代码怎么会用到,但抽象类中非抽象方法和普能类一样可以使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mading314
推荐于2018-04-23 · TA获得超过863个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:345万
展开全部
你老师瞎掰。。。。
谁说抽象类里面不能用this关键字?小伙子啊,你老师把你给害了。。。
追问
这个是老师说的“在抽象类中可以包含静态变量和静态方法,在此类中还可以使用抽象类名调用静态变量,在抽象类中不可以使用this关键字,原因是由于该类为抽象类,既然是抽象类就不可以获取该类的实例对象.”

求大神指点
追答
我这样给你说吧:
抽象类和接口在使用上类似,都是不能直接实例化的类,但可以实例化抽象类的非抽象子类。
抽象类的非抽象子类实例化后,实际上也是抽象类的实例,所以抽象类里面的this实际代表的也是抽象类自己,当然也是实例它的子类对象。

也就是说,抽象类虽然不能直接实例化,但是我们通过实例化它的非抽象子类就可以说是实例化了抽象类。我给你举一个例子:
public abstract class Par{};
public class Sub extends Par{};
上面定义了一个父类抽象类Par,和抽象类的子类Sub,
我可以这样来解释我说的是不是正确的:
Sub instance1=new Sub();//没有问题,自己实例化赋值给自己

Par instance2=new Sub();//没有问题,实例化子类赋值给父类对象
Object instance3=new Sub();//同样么有问题,因为Object是任何类的父类,简称超类。

但你要明白的是,抽象类里面的this,在运行时期实质上指向的是子类的内存地址!

再给你补充点:

我上面说的子类抽象类的非抽象子类的实例就相当于抽象类的实例,我证明给你看:

boolean isSuperInstance=instance1 instanceof Par;
isSuperInstance结果为true,结果很显然了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式