**
多态:Animal a=new Cat();
**
这样a对象就可以访问到父类Animal中的成员变量
访问子类中被重写的方法,子类中特有的方法访问不到(可以通过向下转型访问子类对象),也可以返回父类中没被子类重写的方法
成员变量:编译看左边,执行看左边(返回父类中的成员变量)
成员方法:编译看左边,执行看右边(调用子类重写后的方法)
多态可以通过父类对象访问子类重写的父类方法(不能访问到具体的子类特有的方法),以及父类成员变量
但有一个问题就是它访问不到子类成员变量?
解决办法:
解决方法
采用get()/set()
Java
public class Person {
private String name = "person";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Dad extends Person {
private String name = "Dad";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Person dad = new Dad();
System.out.println(dad.getName());
得到结果:
Dad
由于dad.getName()执行的是子类中重载父类的getName(),因此返回的也是子类中定义的name。这种方法最为推荐,但用起来也繁琐一些。因为这种方法同时维护了两个相同的成员变量,因此使用起来也得小心一些。
向上向下转型

抽象类
关键字:abstract
抽象类的特点

public abstract class abstractProject {
public abstract void eat();
}
若有抽象方法必须是在抽象类
抽象类不可以直接创建对象,要通过多态的形式
创建一个子类继承这个抽象类
其中这个子类要么也是抽象类,要么就必须重写他的父类抽象类的抽象方法
然后
抽象类类名 a=new 子类();
接口

接口本来就是一种抽象类
接口的成员特点

Math常用方法

集合

接口不可直接创建对象,通过实现类来创建对象
比如:List list=new ArrayList();
List集合
List是一个接口,它继承了Collection,所以Collection的所有方法都可使用
特点:有序可重复
List特有的方法

集合迭代器
public class Fu {
public static void main(String[] args) {
Collection<String> c=new ArrayList<>();
c.add("hello");
c.add("world");
c.add("hhello");
System.out.println(c);
//迭代器
Iterator<String> it=c.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
列表迭代器
listIterator
与集合迭代器用法相同,当list需要遍历时,若用Iterator会引起并发错误

本文介绍了Java中的多态特性,包括如何通过父类引用调用子类方法和成员变量。详细讲解了成员变量和成员方法的访问规则,并通过实例展示了如何通过getter/setter方法访问子类特有成员。此外,还探讨了抽象类和接口的概念,以及它们在多态中的作用。最后,提到了集合中的迭代器和ListIterator在遍历数据时的应用。
8787

被折叠的 条评论
为什么被折叠?



