比方说这个代码
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?
这个是老师说的“在抽象类中可以包含静态变量和静态方法,在此类中还可以使用抽象类名调用静态变量,在抽象类中不可以使用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,结果很显然了。
在线求解
Java中定义接口的关键字是class( 0)Java中抽象类一定要包含抽象方法(0)在java中try、catch和finally三个语句块都不能单独使用。(0 )java中this代表当前对象实例(1 )Java支持多重继承( 0)java中包能减少名称冲突问题(1 )一个程序里有且只能有一个公共类,它就是主类( 1 )Java类名...
java知识点丨java抽象类的作用是什么?
探讨抽象类在Java中的作用 在Java编程语言中,抽象类扮演着核心角色,为开发者提供了一种灵活的机制来定义共享行为和属性。理解抽象类的关键在于其与普通类和接口的区别。首先,让我们聚焦于抽象类的作用。抽象类允许我们定义一组共有的方法和属性,这些在子类中实现。当多个类拥有共同的行为和属性时,使...
java中抽象类的new问题
这个是可以的,只要在实现的时候实现它的全部抽象方法是可以实现的。他的做法是在new 那个类的时候,实现哪些方法就可以。这样是可以行得通的。
JAVA抽象类、接口继承的疑惑
抽象类b实现接口a,他可能没有完全实现a的方法。b可以有自己的新方法。c类继承接口a,他可以获得a里面所有的抽象方法,常量属性,内部类,枚举等等。d继承b同时实现c,就是吧上面两个情况综合一下,如果b实现a的某方法,那么d中调用的就是b实现的这个,如果b中没实现a的方法,d中也可以访问a的这个...
Java干货 | 什么是抽象类?怎么定义
Java中,抽象类是一种特殊类,其核心特征是不能被实例化,主要用于被其他类继承并实现其抽象方法。抽象方法没有实现,只有定义,必须在子类中提供具体实现。抽象类可以包含非抽象方法和属性,但至少需要有一个抽象方法。抽象类和抽象方法的定义均使用Java的关键字abstract。抽象类有以下特性:不能直接创建...
JAVA中抽象类能不能定义引用?
抽象类是对数据的抽象,是不能实例化创建对象的,所以你这里new一个抽象类的对象就出错了你要重新定义一个类去继承抽象类。一般抽象类中有抽象方法的话,还得对所有的抽象方法都重写,然后去创建新的类才能引用
java继承抽象类和接口问题
1.抽象类,不能实例化,也就是不能new,也就是不能创始对象。你可以这么理解:抽象,就是模糊的概念,相当于人们说的经常说的概念车之类的,为什么叫概念车,是因为只有个大概的模型,很多技术(在java里我们称之为方法)没有实现,所以不能造出车子(java中我们就是不能new啦)。当然只有解决所以...
那位师傅给我讲下java里的抽象类的定义方法
如果你建立了一个只有抽象方法的类,你就定义了一个接口(interface). 为了说明这种情况, php中有interface 和implements关键字. 你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口. 例如, 你可以写一个myclass implements myiterface. 这两种方法可以依个人偏爱来...
Java中抽象类中的抽象方法一定要加abstract吗?
抽象类是指可以有抽象方法的类,言外之意就是它可以有不抽象的方法。如果方法不加abstract,那它怎么知道谁是抽象方法谁不是?而接口是抽象类的极端情况,接口不能有不抽象的方法,它的所有方法都要求也默认是抽象的,所以它不需要在方法前加abstract。
java中 抽象类里面可以没有抽象方法吗?为什么
1.抽象类有个特点:无法被创建对象,如果抽象类里面放了很多非抽象方法,可以利用这一点!2.abstract无法和final共存修饰类;但是抽象类里面可以用final与static修饰变量和方法!3.根据上面两个特点:抽象类里面可以放一些不想被修改的方法,也不想被创建对象,又可以直接调用;也无法继承!所以就有了这样的类!(...