JAVA子类与继承
目录
JAVA子类与继承
一、子类与父类:
二、子类与对象
三、成员变量的隐藏和方法重写
四、super关键字(P122)
五、final关键字
六、对象的上转型对象(P126)
七、继承与多态(P128)
八、abstract类和abstract方法
JAVA子类与继承
四种权限修饰符:
public > protected > (default) > private
类方法:实例方法与静态方法
对象调用实例方法,类名调用类方法
一、子类与父类:
Java不支持多重继承,一个子类只能继承一个父类
格式:class A extends B { …… }
继承性:子类继承父类中的成员变量与方法
子类父类在同一个包中,可以继承子类中除了private的成员变量
不在同一个包中,不继承除了private和(default)友好的成员变量,继承public和protected
二、子类与对象
子类可以继承父类的一些成员变量和方法,但是不能继承private的成员变量,子类继承父类的一部分方法,这部分方法可以操作未继承到的private变量
关于instanceof运算符:
左面是对象,右面是类,结果为true或者false
// 定义showEat方法,使用父类作为方法的形参,实现多态,传入的是哪个具体对象就调用哪个对象的eat()方法/********* begin *********/public static void showEat(Person a){if(a instanceof Chinese){Chinese c = (Chinese) a;c.shadowBoxing();}if(a instanceof English){English c = (English) a;c.horseRiding();}}/********* end *********/
三、成员变量的隐藏和方法重写
方法重载:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同。需满足下面两个条件之一:
- 参数的个数相同
- 参数的个数不同,但参数列表中对应的某个参数的类型相同
成员变量的隐藏:
子类可声明与父类相同的成员变量的名字,在这种情况下,可以将父类的成员变量隐藏
特点:
- 子类继承的方法所调用的成员变量一定是父类所隐藏的成员变量
- 子类自己定义的方法可以操作子类继承的以及新定义的成员变量
方法重写:通过方法重写可以隐藏已继承的方构造函数和静态方法不能重写!!!
子类定义的一个方法的类型与父类的一致,要满足:方法的名字,参数的个数,参数的类型与父类一致(四同!!!)
四、super关键字(P122)
- 使用super调用父类中被隐藏的成员变量以及方法,比如super.x,super.f()
- 使用super调用父类中的构造方法
子类不继承父类的构造方法,使用super调用父类的构造方法,且super必须是子类构造方法中的头一条语句。即子类继承父类,生成对象时必须先调用父类的构造方法,父类得有一个不带参数得构造方法,方便子类重写。
super( ); 默认为调用父类的构造方法(P124)
五、final关键字
可以修饰类,成员变量,方法中的局部变量
Final类不允许继承,final成员变量不允许重写,final方法中的局部变量或者全局变量为常量!
instanceof 左边对象,右边类
六、对象的上转型对象(P126)
用子类创建一个对象,且把这个对象放在父类中
Animal a;
a=new Tiger();
或者
Animal a;
Tiger b=new Tiger();
a=b;
- 上转型对象不可以调用子类新增的方法与成员变量
- 上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法
- 上转型对象可以调用隐藏的变量,继承的变量与方法以及重写的实例方法(若子类重写了父类的某个实例方法,则上转型对象调用的实例方法一定是重写之后的)
- 可以将对象的上转型对象强制转换为子类对象:Tiger c=(Tiger) a;把上转型对象a强制转换为子类对象c
- 子类重写了父类的静态方法,则子类对象只能调用父类的静态方法
- 对象可调用:继承的变量与方法,新增的变量与方法,重写的方法
七、继承与多态(P128)
父类的方法被子类重写时,可以产生各自的功能行为
继承、重写、父类引用指向子类对象
八、abstract类和abstract方法
Abstract类:
- 只允许声明,不允许实现,没有方法体,该有的参数要有
- 不能用static和final修饰,必须是实例方法
- 非abstract类:不可有abstract方法;
abstract类:可以有abstract方法,可继承与重写,也可以有非abstract方法,若是子类,必须重写父类的抽象方法,且只能大于父类权限!
构造方法必须重写!!!
4、 可以使用abstract类声明对象,但是不能用new创建该对象
abstract class Person {
public Person() {};#必须重新声明一下
public Person(String name,int age){this.name=name;this.age=age;
}
}
abstract class Player extends Person {public Player() {super();}#同理需要声明!public Player(String name,int age){super(name,age);
}
}