62,628
社区成员
发帖
与我相关
我的任务
分享
class A
{
public void methodA(Object o)
{}
}
A a = new A
{
public void methodA(Object o)
{
if(o instanceof String)
methodA((String)o);
else if(o instanceof Integer)
methodA((Integer)o);
else
super.methodA(o);
}
public void methodA(String s) //是不是重载出来的? 3个methodA的存在 难道不是重载???
{
}
public void methodA(Integer i) //是不是重载出来的? 只不过你不能直接调用而已
{
}
};
static ArrayList<? extends Object> list =
new ArrayList<Vo1>(){
..........................
};
class A
{
public void methodA()
{}
}
class B extends A
{
public void methodA()
{}
public void methodB()
{}
}
class C extends A
{
public void methodA()
{}
public void methodC()
{}
}
public void testMethod(A a)
{
a.methodA(); // row 1
a.methodB(); // row 2
a.methodC(); // row 3
}
package alltest;
import java.util.ArrayList;
class Vo{
}
@SuppressWarnings("serial")
public class ArrayListTest {
static ArrayList<Vo> list = new ArrayList<Vo>(){
@Override
public boolean add(Vo v){
System.out.println("my add method overload");
return true;
}
};
public static void main(String[] args) {
Vo o = new Vo();
list.add(o);
}
}
OutPut:
my add method overload
package alltest;
import java.util.ArrayList;
class Vo1{
}
@SuppressWarnings({ "serial", "unchecked" })
public class ArrayListTest2 {
static ArrayList<? extends Object> list =
new ArrayList<Vo1>(){
@SuppressWarnings("unused")
public boolean add(){
System.out.println("My add Method is transfered");
return true;
}
public void get(){
System.out.println("My get Method is transfered");
}
};
public static void main(String[] args) {
/**
* The method get(int) in the type
* ArrayList<capture#2-of ? extends Object>
* is not applicable for the arguments ()
*/
list.add(); //报错,无法使用
list.get(); //报错,无法使用
}
}
class Base {
void f() { }
}
class Inherited extends Base {
void f() { }
void g() { }
}
public class Test {
public static void main(String[] args) {
Inherited i1 = new Inherited();
i1.f(); // 没有问题
i1.g(); // 也没有问题
Base i2 = new Inherited();
i2.f(); // 没有问题
i2.g(); // 编译错误!无法访问g(),应为i2向上转型为Base,而g()不是Base的接口之一,从而被隐藏。
}
}
import java.util.*;
public class Test {
public static void main(String[] args) {
class ArrayListInner extends ArrayList {
void f() { }
}
ArrayListInner list1 = new ArrayListInner();
ArrayList list2 = new ArrayList() {
void f() { }
};
// list1是一般内部类的实例,而list2是匿名内部类的实例
list1.f(); // 可以访问f()
list2.f(); // 编译错误!不可以访问f()
}
}