1.什么是继承
首先通过代码引入
//学生类
class Student{
int age;
String name;
void study(){
}
}
//工人类
class Worker{
int age;
String name;
void work(){
}
}
无论是工人还是学生,都有共同属性:年龄和姓名。
为了提高代码的复用性,可以把工人和学生的共性提取出来
class Person{
int age;
String name;
}
如何让学生和工人和Person联系起来———–这就是继承 (ง •̀_•́)ง
class Student extends Person{
void study()
{
}
class Worker extends Person{
void work(){
}
}
学生和工人成了子类,人成了父类,将子类和父类联系起来,用extends关键词
继承让类与类之间产生了关系
2.什么时候定义继承
必须保证类与类之间有所属关系。即类似狗是人类的好朋友,XX是大自然的搬运工,香蕉是水果等等
3.JAVA多继承
代码
//父类一
class Father1{
void breath(){
}
void beat(){
}
}
//父类二
class Father2{
void breath(){
}
void speak(){
}
}
//人继承
class Person extends Father1,Father2{
}
这样写是不能通过编译的
一个类只能有一个父类。即java不能直接继承多个父类
但是java可以实现多接口
class A extends B implements C,D,E
(以后写接口)
4.子父类的成员变量和成员函数
成员变量:
先看代码:
class Fu{
int num1=1;
}
class Zi extends Fu{
int num2=2;
}
class Demo{
public static void main(String[] args){
Zi z = new Zi();
System.out.println(z.num1+":"+z.num2);
}
}
结果
1:2
特殊情况:
1)如果父类中
private int num1=1;
私有后子类就不能直接访问了,setter和getter方法可以用
2)如果父类和子类都定义了相同变量,那么都存在于子类中。用super访问父类,this访问子类
(默认访问子类的num)
class Fu{
int num=1;
}
class Zi extends Fu{
int num=2;
void show(){
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
class Demo{
public static void main(String[] args){
Zi z = new Zi();
z.show();
}
}
输出
2
2
成员函数:
还是代码:
class Fu{
void show1{
System.out.println("show1 run");
}
}
class Zi extends Fu{
void show2{
System.out.println("show2 run");
}
}
class Demo{
public static void main(String[] args){
Zi z = new Zi();
z.show1();
z.show2();
}
}
输出:
show1 run
show2 run
特殊情况:
1)子类父类定义相同函数show(),则运行子类的方法。这叫做重写(override) 【敲黑板】
应用举例:
//父类
class Phone{
void run(){
System.out.println("打电话");
System.out.println("接电话");
}
}
然后你有了一个要玩游戏的新手机而且维持原功能,只需要
class NewPhone extends Phone{
void run(){
super.run();
System.out.println("玩游戏");
}
}
父类已经将功能定义了,子类直接用,写内容即可。如果还需要原来的东西,用super调用
在使用时,需要注意:
1.子类覆盖父类必须要保证子类权限大于等于父类权限(public最大)
2.静态覆盖静态,非静态和静态之间不能相互覆盖
3.写法上必须一样,即函数返回值类型 函数名 参数列表都要一样
fu: int show()
zi: void show()
这样式的就不行