问题
父类
package test;
import java.util.ArrayList;
import java.util.List;
public class F {
public final List<List<Integer>> prompt;
public F() {
prompt = new ArrayList<>();
}
public F(List<Integer> list, Integer last) {
List<List<Integer>> lists = addList();
prompt = new ArrayList<>();
// prompt.addAll(lists);
}
public List<List<Integer>> addList(){
List<List<Integer>> find=new ArrayList<>();
List<Integer> li1=new ArrayList<>();
li1.add(3);
List<Integer> li2=new ArrayList<>();
li2.add(4);
find.add(li1);
find.add(li2);
return find;
}
}
子类
package test;
import java.util.ArrayList;
import java.util.List;
public class S extends F{
public final List<List<Integer>> prompt;
public S(){
prompt = new ArrayList<>();
}
public S(List<Integer> list, Integer last) {
// super();
// super(list,last);
// this();
List<List<Integer>> lists = addList();
prompt = new ArrayList<>();
prompt.addAll(lists);
}
public List<List<Integer>> addList(){
List<List<Integer>> find=new ArrayList<>();
List<Integer> li1=new ArrayList<>();
li1.add(1);
List<Integer> li2=new ArrayList<>();
li2.add(2);
find.add(li1);
find.add(li2);
return find;
}
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
Integer last=new Integer(0);
F s=new S(list,last);
System.out.println(s.prompt);
S s1=new S(list,last);
System.out.println(s1.prompt);
}
}
结果
[]
[[1], [2]]
总结
java 多态屏蔽子类属性
所以在编译阶段,子类对象只能调用父类中存在的属性和方法, 所以多态相当于屏蔽了子类独有的成员。