java未设置变量和方法
我有一个抽象类,它被扩展以提供我需要的标准方法和变量。 然而,这一次,我必须扩展同一个类,但是一些变量和一些方法不适合我。所以我想知道是否有可能关闭这些变量/方法。我指定我必须扩展这个类,我不能创建另一个。 例如,我有一个抽象类:
public abstract class A {
protected int a, b, c;
public abstract void A();
public abstract void B();
public abstract void C();
}
public class B extends A {
public B() {
a = 5;
b = 7;
A();
B();
}
public void A() {
System.out.println("A: " + a);
}
public void B() {
System.out.println("B: " + b);
}
//Unset the variable 'c' and the method 'C()' because they are useless
}
其实我不知道是否值得去做,我依靠你的知识
# 1 楼答案
没有“取消设置”超类的变量或方法的内置机制
标准解决方案是创建两个基类
一个(糟糕的)解决方法,只适用于方法,可以实现类似下面的代码,以禁止使用
C()
长话短说,
javac
将接受使用C()
,但RuntimeException
将在运行时发布。如果未捕获,此异常将产生崩溃,但由于RuntimeException
的性质,编译器不需要try
语句这只是一段难看的代码
Nick L.在另一个回应中提出了一个更干净的解决方案,将
C()
设置为私有# 2 楼答案
如前所述,这是一个糟糕的设计。如果派生类中不需要某些方法/字段,那么应该将它们放在另一个抽象类中,并派生上一个抽象类
作为一种解决方法,我认为如果希望函数不抽象,可以将
B
类中要公开访问的函数设置为私有函数:# 3 楼答案
你唯一能做的就是把
method c
变成abstract
。所以不需要实施。如果你在以后的子类中需要它,你可以使用它