JAVA的继承

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()

这样式的就不行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值