1, 单词:inherit:继承 ,resolve,决定 instance 实例 compound 复合的 polymorphism多态 region地区,地理 encryption加密
2,方法前面有数据类型,前面什么也没有,例如void int srraaa(){},默认包内有效
*3,instance method实例方法,对象方法,归到非静态的成员方法
*类方法。也即静态方法
*4,
*被表标注解的方法,jvm认为方法是重写父类或者是父类的父类中的方法 * */
5,作用域或者生命周期就近原则。
/*
* 本类的方法内找局部变量,如果找不到,进行第二种,本类中找本类的成员变量,找到就返回,
* 如果,还没找到,就去父类中,找父类的成员变量(不能在父类的方法中找),找到就返回,
* 如果,还找不到。如果,存在父类的父类,就找父类的父类的成员变量.....,直到将所有的父类走
* 一遍为止。如果都找不到,就抛出异常,变量没定义。
* 当本类的成员变量和局部变量与父类的成员变量重名的时候,默认情况下,本地变量会隐藏上一级的变量
* 当本地局部变量与本类的成员变量重名的是时候,用this处理
* 当本类的成员变量和父类的成员变量重名的时候,使用super来处理
*
6,子类不能继承父类的构造方法
7,final关键字的用法
* (1),修饰类,表示类不能被继承
* (2),修饰变量表示变量变成常量,并且只能赋值一次(自定义常量)
* (3),修饰成员方法,表示该成员方法不能被重写
* final在方法里,可以放在局部变量前面
* final修饰数组,面试题都是坑
* 8,发生多态现象的前提
* (1),必须有继承
* (2)有方法重写
* (3 )有父类引用指向子类对象
* 9,多态情况下,成员的访问特点,
* (1)访问成员变量的时候,成员变量必须要在父类中存在。编译看左边,运行看左边
* (2)访问成员方法的时候,编译看左边,运行看右边
* (3)访问静态方法的时候,编译看左边,运行看左边
* 10,多态的弊端
* 11,向下类型转换时,需要注意,类型一样要匹配
继承练习:
劳工 类型
* 把劳工类,作为父类(超类) super class,基类base class
* 继承的概念,
* @author jerry
*
*/
public class Labor{
//成员变量
private String name;
private int age;
public int i = 20;
public Labor() {
super();
System.out.println("Labor()无参构造");
}
public Labor(int i) {
super();
this.i = i;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//构造方法和成员方法
public void sleep(){
System.out.println("sleep()");
}
/**
* 子类可以继承父类中,非私有的成员(成员变量和成员方法)
* private :不行 本类内部有效
* 默认 default /friendly :包内有有效
* public : 所有都有效
* protected: 受保护的,从父类继承过来的,子类可以访问
*/
protected void method1(){
System.out.println("Labor#method1()");
}
public static void method2(){
System.out.println("Labar#method2()");
}
}
子类 老师 类 ,继承自Labor类型
* @author jerry
*
*/
public classTeacher extends Labor{
/**
* 既然是发生了继承关系,
* 非私有的成员变量,已经包含在当前类中
*/
//Cannot reduce the visibility of theinherited method from Labor
@Override
public void method1(){
super.method1(); //调用父类原有的功能
// 对父类原有的功能的 发扬过大
this.setAge(20);
System.out.println("Teacher#method1()");
}
public void show(){
//show方法中调用method1(),此时应该调用的谁的方法?
method1();
// this.method1(); // 写不写this 都是一样的
// method3();//编译错误,在所有类范围内都找不到该方法的签名
method2();
}
//重写父类中的静态方法
// instance method :实例方法 对象方法 归到 非静态的成员方法
// 类方法静态方法
// override 覆写,重写
//This instance method cannot override thestatic method from Labor
public static void method2(){
System.out.println("");
}
/**
* @Override 被这个注解标示的方法,
*jvm会自动的认为方法是重写父类或者是父类的父类中的方法
*/
//The method method5() of type Teachermust override or implement a supertype method
// @Override
public void method5(){
System.out.println("method5()");
}
}
packagecom.newedu.jb.day10.inheritance.method;
public classTeacherDemo {
public static void main(String[] args) {
Teacherteacher = new Teacher();
teacher.show();
}
}