package t2;
public class TestStudent {
/**
* @param args
*/
public static void main(String[] args) {
Student s = new Student();
s.setName("小明");
s.setAge(20);
s.setSchool("北京大学");
// 重载
// 同一个事物,做同一件事情,因为条件不同,做法不同
/*
* 1. 同一个类中的方法
* 2. 方法名完全相同
* 3. 方法的参数不同 (a.参数类型不同,b.参数个数不同 c.参数的顺序不同)
* 4. 重载和方法的返回类型无关
*/
s.info();
s.study();
s.study(10);
s.study("微机原理");
System.out.println("----------------");
//重写
// 同一件事情,一样的条件,不同的对象有不同的做法
/*
* 1. 必须要有继承关系,子类重写父类的方法
* 2. 子类中重写的方法,必须和父类拥有相同的方法名和参数列表
* 3. 重写方法时,不能使用比父类中被重写的方法更低的访问权限 。
public ->protected -> default ->private
(从高到低)
*/
s.work();
//对象类型转换
// 1. 子类(subclass)对象可以当做父类对象使用
// 2. 一个基类(superclass )的引用,不能访问子类对象新增的属性和方法
// 3. 该子类对象,可以通过强制类型转换成 本来的子类对象 (向下转型)
Person p = new Teacher();
p.setName("张三");
p.setAge(20);
p.info();
//向下转型之前 可以使用关键字 instanceof 来判断对象的类型
if (p instanceof Student) {
((Student)p).study();
}else{
//不是当前对象
System.out.println("不是Student对象");
}
//动态绑定 重写
//在执行期间,根据对象的实际类型,来执行对象的方法
p.work();
}
}