不用考虑这种问题class Super{ public void api(){} }class Sub extends Super{ //... //"阻止别人使用我父类继承下来的public 方法。" }Super sub = new Sub(); sub.api();//难道不能call到Sub的api接口?多态何在?!
class W{ public void f(){ System.out.println("belong W"); } } public class UU extends W{ public static void main(String args[]) { new UU().f(); 我不想别人使用这个f()方法。如果屏蔽掉他。 } }
final class W{ } 不让别人继承。
我晕死你,没有办法做到 改成private吧你提的问题 都好 bt 你思维 好乱,别怪我说实话
class W{ public void f(){ System.out.println("belong W"); } } class M { private W w = new W(); private final void f() { w.f(); } }public class U extends M{ public static void main(String[] args) { new U().f(); } }加个中间层。
顶楼上的,楼主你父类的方法连子类都不让用,那你public干嘛改成private
覆盖那个方法,抛OperationNotSupportedException
protected 是这个吗?不过同一个包下面还是可以访问的
很多人说final,final能阻止使用吗?不能吧.........
提供一个思路给lz: 可以用一个类来包装你的类, 就是用引用代替继承, 比如: class A{ public void a(); public void b(); public void c(); } class B{ private A a = new A(); public void a(){ a.a(); } public void c(){ a.c(); } } 这样b这个方法就被隐藏了。 然后让别人用你这个B代替直接用A不知道可行否,lz自己试试吧good luck
反射被修改之后会保存回去 *.class
这就是继承啊! 都知道你祖上传个宝贝下来,赖不掉的。 final是不让修理,东西还在。
class SuperClass{ public void a(){ //CODE } }class SubClass extends SuperClass{ public void a(){ throw new UnsupportedOperationException(); } public void b(){ } }
有个办法 interface A { PUUBLIC VOID D ();} Class B { public void test(){ system.out.println("父类方法")} }class c extends D emlpments A{ } A test_c =new c(); test_.test() ; 报错 没测试应该是这样吧
public的定义不就是对外开放的么?不然还有啥意义啊?
public void api(){}
}class Sub extends Super{
//...
//"阻止别人使用我父类继承下来的public 方法。"
}Super sub = new Sub();
sub.api();//难道不能call到Sub的api接口?多态何在?!
public void f(){
System.out.println("belong W");
}
}
public class UU extends W{
public static void main(String args[]) {
new UU().f(); 我不想别人使用这个f()方法。如果屏蔽掉他。
}
}
}
不让别人继承。
class W{
public void f(){
System.out.println("belong W");
}
}
class M
{
private W w = new W();
private final void f() {
w.f();
}
}public class U extends M{ public static void main(String[] args) {
new U().f();
}
}加个中间层。
可以用一个类来包装你的类,
就是用引用代替继承,
比如:
class A{
public void a();
public void b();
public void c();
}
class B{
private A a = new A();
public void a(){
a.a();
}
public void c(){
a.c();
}
}
这样b这个方法就被隐藏了。
然后让别人用你这个B代替直接用A不知道可行否,lz自己试试吧good luck
都知道你祖上传个宝贝下来,赖不掉的。
final是不让修理,东西还在。
class SuperClass{
public void a(){
//CODE
}
}class SubClass extends SuperClass{
public void a(){
throw new UnsupportedOperationException();
} public void b(){ }
}
public void f(String password){
if(!password.equals("123")){
return;
}
/*
* 业务逻辑
* */
}
public void f2(){
}
}public class Test9 extends Test9A{ public void f(String password){
super.f(password);//要密码才能用
}
}
楼主的 这个 问题让我想起了 另外一个问题
比如一个 方法的参数 要求只能在 0-10 之间 问 在编译的时候怎么判断?不是在运行的时候
我一直没有想到
这个就不要public就行
用Java默认类型的就行
这样包外不管是继承还是不继承都不能访问它了
例如
package myapi;public class MyClass {
void showDefault(){
System.out.println("MyClass default Show");
} public void showPublic()
{
System.out.println("MyClass public Show");
}
}
//把它打包成jar那样别人就无法访问它的showDefault就算继承也无法访问
//但继承与MyClass的类可以访问showPublic 也就实现了showDefault方法
//可以被同一包内的所有对象共享,但发布的jar就保护了它的安全
Java给了派生类不实现其超类中某些接口的自由,就是使用UnsupportedOperationException异常。
这在很多场合都有用,大家可以去看Java API,所有集合类的add()和remove()方法都是声明抛出UnsupportedOperationException异常的,这就意味着你可以继承某个集合类(如ArrayList),覆盖它的remove(),抛出一个UnsupportedOperationException异常,从而得到一个只能添加不能删除的ArrayList。
Class B {
public void test(){ system.out.println("父类方法")}
}class c extends D emlpments A{
} A test_c =new c(); test_.test() ; 报错 没测试应该是这样吧