Java abstract类中可以有非abstract方法,但该方法不可以用final修饰对不对?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java abstract类中可以有非abstract方法,但该方法不可以用final修饰对不对?相关的知识,希望对你有一定的参考价值。
这两天学Java看到一判断题,说abstract类中可以有非abstract方法,但该方法不可以用final修饰。但是后半部分看着好纠结啊,我觉得是对的,但又不敢确定,求大神指点。
错误,不能用final修饰final修饰方法即表示此方法不能被子类覆盖
但是abstract表示方法需要子类实现
两者冲突 参考技术A public abstract class FinalTest
/**
* @Title: test
* @Description: 抽象方法不能使用<i>final</i>修饰, 因为 final 修饰的方法是最终的/不可修改的,
* 所以被修饰的方法不能是抽象的, 由此可知 <i>Interface</i>中的接口方法也不能使用 final 修饰.
* 但成员属性只能是 <code>public static final</code>修饰, 即使没有添加修饰符时.
*/
public abstract void abstractMethod();
/**
* @Title: test2
* @Description: 当非抽象方法已经是最理想的逻辑时, 通常会使用<i>final</i>修饰避免其子类修改该接口的逻辑.
*/
public final void notAbstractMethod()
希望能帮助你!
追问题目是说abstract类中可以有非abstract方法,但“该方法”不可以用final修饰。它说的是该方法啊,那就是非abstract方法啊。
追答"说abstract类中可以有非abstract方法,但该方法不可以用final修饰"
这句话的后半部分说的不对, 非abstract方法都可以使用final修饰, 用以表示最终的不可覆盖/变更的方法
public static void main(String[] a)
Te t = new Te();
t.geta();
public void seta()
abstract class Es
abstract void seta();//抽象方法不可final修饰,因为该方法需要继承Es的子类去实现呢
public final void geta()
//非抽象方法可final修饰
System.out.println("final");
追问
所以,我觉得是对的
参考技术C 写个例子,测试一下,就清晰了。。。。。。每日一刷:java基础
java基础
题解:A、abstract类不能与final,static使用。final修饰方法,子类可以调用,但不能覆盖。
B、最好不要有private因为私有和抽象放在一起,子类如果想重写父类的私有方法根本继承不过来,也就无法重写
C、抽象类中可以有非抽象方法
D、抽象类中可以都是非抽象的,但是抽象方法一定要在类和接口中
题解:1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用。
题解:首先 我们要知道 ==
这个比较符号
==
可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。==
和!=
比较的是地址 指第一个new()出来的地址,所以因为两次new() 分出的内存也不同
题解:public void add(Byte b) b=b++; 这里涉及java的自动装包/自动拆包(AutoBoxing/UnBoxing) Byte的首字母为大写,是类,看似是引用传递,但是在add函数内实现++操作,会自动拆包成byte值传递类型,所以add函数还是不能实现自增功能。也就是说add函数只是个摆设,没有任何作用。 Byte类型值大小为-128~127之间。 add(++a);这里++a会越界,a的值变为-128 add(b); 前面说了,add不起任何作用,b还是127
题解:count一直都是0
题解:byte类型的变量在做运算时被会转换为int类型的值,故A、B左为byte,右为int,会报错;而C、D语句中用的是a+=b的语句,此语句会将被赋值的变量自动强制转化为相对应的类型。
以上是关于Java abstract类中可以有非abstract方法,但该方法不可以用final修饰对不对?的主要内容,如果未能解决你的问题,请参考以下文章