面向对象最重要的概念:多态性
java中体现多态的两种方式:
(1)方法的重载(本类的同名方法,体现相同的名称方法实现不同逻辑)与重写(子类对父类方法的覆盖,子类可以使用和父类相同的方法名,覆盖掉父类逻辑)
(2)可以直接应用在抽象类和接口上–运行与编译时类型不一致则出现***对象的多态***。
//前提:Person类时Studnet的父类
//正常实例化
Student s = new Student();
Person p = new Person();
//特殊情况讨论
Person e = new Student();
//问题1:e是否可以访问Student中成员变量?
//答:不可以,属性在编译时确定的,编译时为Person类型,没有Student类中的成员变量,所以无法访问
//问题2:若Person与Student类中有同名方法,哪个类中的方法被调用?
//答:Student类中的方法被调用,java的方法是运行在栈内存中,在运行方法时会动态的进栈与出栈,e引用的是在堆中的Student类,所以Student类的方法被调用
instanceof 检验一个对象是否属于某类
基类----object类
object是所有java类的根父类
public class Test{
public void test(Object obj)
//问题,想给test方法设置一个形参参数,这个参数不确定到底会传进来一个什么类型,
//可以确定的是传递实参一定会是一个类,那么test方法的形参要设置一个什么类型?
}
public static void main(String[] args){
Test t=new Test();
Person p=new Person();
Student s = new Student();
object o = new Student();//所有子类可以调用父类方法
t.test(p);
}