Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录

一,继承

1.什么是继承

2.怎么去继承:

3.注意:

4.继承怎么学

二,继承基本使用

三,成员变量和成员方法访问特点

1.成员变量访问特点

1,子类和父类中的成员变量不重名:

总结:

2,子类和父类中的成员变量重名

总结:

三,成员方法访问特点

1,子类和父类中的成员变量不重名:

2,子类和父类中的成员变量重名

总结


一,继承

1.什么是继承

父类怎么形成的:

我们的定义了多个类,发现这些类中有很多重复性的代码,我们就定义了一个父类,将相同的代码抽取出来放到父类中,其他的类直接继承这个父类,就可以直接使用父类中的内容了

2.怎么去继承:

extends

格式:

子类 extends 父类

3.注意:

a.子类可以继承父类中私有和非私有成员,但是不能使用父类中私有成员

private私有的成员还是不能使用,但可以继承

b.构造方法不能继承

方法和类是绑定在一起的

4.继承怎么学

a.继承不要从是否"拥有"方面来学习

要从是否能"使用"方面来学习

只要关注能否使用,只要继承,就能使用非私有成员,目的就是为了减少代码重复,优化代码,是一种重要的面向对象设计思想(不用绕圈想了)

二,继承基本使用

我们需要三个类来演示

1.定义一个父类,在其中定义重复性的代码

2.定义一个子类继承父类 -> extends

子类 extends 父类

3.创建子类对象,直接使用父类中非私有成员

以Employee-->Manager-->Teacher为例,Employee为父类

java 复制代码
public class Employee {
    String name;
    int age;


    public void work(){
        System.out.println("工作");
    }

    private void eat(){
        System.out.println("吃饭");
    }
}
java 复制代码
public class Manager extends Employee{

}
java 复制代码
public class Teacher extends Employee{

}

创建测试类,new子类,使用父类成员,我们发现只能使用父类非私有成员

java 复制代码
public class test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.name = "张三";
        teacher.age = 23;
        System.out.println(teacher.name+".............."+teacher.age);
        teacher.work();
        //teacher.eat();子类继承父类之后不能使用父类私有成员,只能使用父类非私有成员


        System.out.println("===================");

        Manager manager = new Manager();
        manager.name = "李四";
        manager.age = 34;
        System.out.println(manager.name+".............."+manager.age);
        manager.work();
        //manager.eat();子类继承父类之后不能使用父类私有成员,只能使用父类非私有成员
    }
}

三,成员变量和成员方法访问特点

1.成员变量访问特点

1,子类和父类中的成员变量不重名:

创建三个类,Fu类,Zi类,test类

java 复制代码
public class Fu {
    int numFu = 100;
}
java 复制代码
public class Zi extends Fu{
    int numZi = 10;
}
java 复制代码
public class test {
    public static void main(String[] args) {
        //创建父类对象
        Fu fu = new Fu();
        System.out.println(fu.numFu);//父类中的numFu
        //System.out.println(fu.numZi);//不能直接调用子类特有成员

        System.out.println("======================");
        //创建子类对象

        Zi zi = new Zi();
        System.out.println(zi.numZi);//子类中的numZi
        System.out.println(zi.numFu);//继承了父类,可以使用父类非私有成员
        
    }


}

运行结果如下

总结:

看等号左边是谁,先调用谁中的成员

如果等号左边是父类类型,只能调用父类中的成员变量。

如果等号左边是子类类型,既能调用子类的,还能调用父类中继承过来的非私有成员。

2,子类和父类中的成员变量重名

java 复制代码
public class Fu {
    int numFu = 100;

    int num = 10000;
}
java 复制代码
public class Zi extends Fu{
    int numZi = 10;

    int num = 1000;
}
java 复制代码
public class test {
    public static void main(String[] args) {
        //创建父类对象
        Fu fu = new Fu();
        System.out.println(fu.numFu);//父类中的numFu
        //System.out.println(fu.numZi);//不能直接调用子类特有成员
        System.out.println(fu.num);//父类的

        System.out.println("======================");
        //创建子类对象

        Zi zi = new Zi();
        System.out.println(zi.numZi);//子类中的numZi
        System.out.println(zi.numFu);//继承了父类,可以使用父类非私有成员
        System.out.println(zi.num);//子类的
    }


}

如果把子类里面的num=1000注释掉,输出的zi.num会是什么值呢

会发现zi.num会直接继承Fu类里面的num=10000

那如果左边右边不一样呢

输出的结果会是Zi类里面的1000吗

不是,依然是父类里面的10000,所以只有看左边才能确定调用的是谁中的成员

总结:

继承前提下,成员变量访问特点口诀:

看等号左边是谁,先调用谁中的成员,子类没有,找父类

三,成员方法访问特点

1,子类和父类中的成员变量不重名:

依然创建三个类

java 复制代码
public class Fu {
    public void methodFu(){
        System.out.println("我是父类中的methodFu");
    }
}
java 复制代码
public class Zi extends Fu{
    public void methodZi(){
        System.out.println("我是父类中的methodZi");
    }
}

测试类

java 复制代码
public class test {
    public static void main(String[] args) {
        Fu fu = new Fu();
        fu.methodFu();
        //fu.methodZi();  不能调用子类特有方法

        System.out.println("==================");
        Zi zi = new Zi();
        zi.methodZi();
        zi.methodFu();//继承父类,可以调用父类中非私有方法


    }
}

运行

2,子类和父类中的成员变量重名

给Fu类和Zi类各加一个method方法

java 复制代码
public class Fu {
    public void methodFu(){
        System.out.println("我是父类中的methodFu");
    }
    
    
    public void method(){
        System.out.println("我是父类中的method方法");
    }
}
java 复制代码
public class Zi extends Fu{
    public void methodZi(){
        System.out.println("我是子类中的methodZi");
    }


    public void method(){
        System.out.println("我是子类中的method方法");
    }
}

测试类

java 复制代码
public class test {
    public static void main(String[] args) {
        Fu fu = new Fu();
        fu.methodFu();
        //fu.methodZi();  不能调用子类特有方法
        fu.method();//父类中的method方法

        System.out.println("==================");
        Zi zi = new Zi();
        zi.methodZi();
        zi.methodFu();//继承父类
        zi.method();//子类中的method方法


    }
}

同样,如果子类里面没有method方法,就会继承父类里面的方法

总结

成员方法:看new的是谁,先调用谁中的方法,子类没有,找父类

继承中,成员变量访问特点:看等号左边是谁,先调用谁中的成员变量

​继承中,成员方法访问特点:看new的是谁,先调用谁中的方法

相关推荐
崖边看雾10 小时前
同步上下文管理器规则
开发语言·数据库
AI的探索之旅10 小时前
AI + LLM Wiki 高效学习 OpenCV:我的 8 步闭环方法论
人工智能·opencv·学习
weixin_4316004410 小时前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
名字还没想好☜19 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王19 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..1 天前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO1 天前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆1 天前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光1 天前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林1 天前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端