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修饰, 用以表示最终的不可覆盖/变更的方法

本回答被提问者和网友采纳
参考技术B  public class Te extends Es
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修饰对不对?的主要内容,如果未能解决你的问题,请参考以下文章

Java基础巩固

java抽象接口 和final

每日一刷:java基础

每日一刷:java基础

每日一刷:java基础

每日一刷:java基础