Person person=new Student("张洪慊");//张洪慊这个学生是一个人
Person person=new BoyFriend("班长");//班长这个男朋友角色是一个人
Student student =new Person();//人是一个学生(人不一定是一个学生,可能还是医生,IT男....)
类定义:
public class Person{
public void method(){
System.out.println(“一个普通方法”);
}
}
public class Student extends Person{
public void method(){
System.out.println(“一个被重写的方法”);
}
public void method2(){
System.out.println(“一个干扰方法”);
}
}
类使用:
Student s = new Student();
s.method();//编译时期:会去找Student类中有没有method()方法,有编译通过,没有编译失败
//运行时期:找student所属的类中有没有method()方法,有直接运行,没有报错
//编译时期看=左边,运行看等号右边
Person p = new Student();
p.method();//先找Person类,有method()方法,编译通过,运行时执行Student类中method()方法
p.method2(); // 先找Person类,有method2()方法,直接编译报错
b.自动类型提升与强制向下转型
class Animal{
public void eat(){
System.out.println("吃东西");
}
}
class Dog extends Animal{
@Override
public void eat(){
System.out.println("吃骨头");
}
public void lookHome(){
System.out.println("看家");
}
c.final与static关键字
1.final:
a.可以修饰变量,被修饰变量就变成了常量,并且只能被赋值一次
public static final double PI=3.1415926//PI是个固定的值,我们可能会忘掉
//用PI常量存储,直接通过Math.PI来使用
final Person p=new Person();//p的地址值不能被重新赋值,p自始至终都指向Person对象
b.final修饰的方法不能被子类重写
c.final修饰的类不能被继承
public Father method() {//Father father=new Son();
final int i=10;//如果不加final修饰,当method()方法被执行完
//局部变量i要被销毁,当使用father.function();调用Son类中function
//int i=10; //无法访问i,加上final,即使method()执行完毕i也不会被销毁,因为i已经变成常量存储在常量池中,延长i的生命周期
class Son implements Father {
public void function() {
System.out.println(i);
}