Java基础——继承、方法的重载和重写、构造器

一、继承:

1.父类(基类):

       - 父类可以有多个子类
       - 父类是被继承的类。它包含子类所继承的属性和方法。
       - 父类可以是一个具体的类,也可以是一个抽象类。


2.子类(派生类):

        - 子类只能有一个父类,且不能互相继承
        - 子类是从父类继承的类。它可以继承父类的成员(字段和方法),并且可以添加自己的成员或重写父类的方法。
继承的本质就是代码的复用,是子类用父类的代码,父类用不了子类的代码

 例:

public class Person {
    public Double height;
    public String name;
    public char sex;

    public void run(){
        System.out.println("任何人都可以跑!");
    }

    public void a(){
        System.out.println(".............");
    }
}

-------------------------------------------------------
public class Student extends Person{

}
-------------------------------------------------------
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.run();
    }
}

 内存图以及流程:

此时,Test可以调用run方法,因为Student继承了来自Person的方法,由此可得出,继承是代码的复用。

二、类的加载顺序:

1.先完成扫描:寻找父类

2.编译:父类.java----->父类.class,子类.java -------->子类.class

3.把父类.class和子类.class放入方法区中,接着main方法入栈

4.先创建父类对象,在创建子类对象。如果调用子类对象,也要先创建父类对象

5.static在main方法前执行

例:如当前代码,

1.扫描发现父类,编译父类Base.class进入方法区,子类Test.class进入方法区

2.执行Base里的static方法--------------->输出base static

3.执行Test里的static方法 ---------------> 输出test static

4.Test中的main方法入栈,创建子类对象,但是前提创建父类对象---------->输出base constructor

5.创建完父类对象,创建子类对象-------------->输出 Test constructor

public class Test extends Base{
    public Test(){
        System.out.println("test constructor");
    }
    public static void main(String[] args){
        new Test();
    }

    static {
        System.out.println("test static");
    }
}

class Base{
    static {
        System.out.println("base static");
    }
    public Base(){
        System.out.println("base constructor");
    }
}

-----------------------------------------------
//运行结果:
//    base static
//    test static
//    base constructor
//    test constructor

三、方法的重载和重写:
1.方法的重载:
定义:

         它指的是在同一个类当中,方法名相同但参数列表不同

 例:

public class A {
    public void study(){

    }
    
    public void study(String name){

    }
//同在A类,方法名同为study,但参数列表不同
}
作用:

       1. 增强代码的可读性和可维护性

       2. 支持不同的参数组合,只要它们的参数列表不同(包括参数类型、数量和顺序)。这样可以提供对不同参数组合的处理方式

       3. 增加灵活性和功能

       4. 简化API设计, 重载帮助设计更简洁、易用的API。它允许用户用一致的方法名来调用不同的操作,而无需记住多个方法名。例如:

public class FileReader {
    public void read(String fileName) {
        // 从文件中读取内容
    }
    
    public void read(String fileName, String encoding) {
        // 从文件中读取内容,指定编码
    }
    
    public void read(InputStream inputStream) {
        // 从输入流中读取内容
    }
}

         5. 与继承和多态的配合 方法重载是多态的一部分,使得子类能够根据需要实现或扩展方法的功能,而不需要改变方法名。重载方法可以提高代码的复用性和扩展性。


2.方法的重写:

 定义:

        发生在父子类当中,子类重新实现父类方法的功能。方法重写之后,子类对象调用的也是重写后的方法

例:

public class A {
    public void study(){

    }

    public void study(String name){

    }

    public void run(){
        System.out.println("A跑的很快!");
    }
}
----------------------------------------------

public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.run();
    }
}
--------------------------------------------
public class B extends A{
    public void run(){
        System.out.println("B跑的很快!");
    }
}

 此时的运行结果:B跑的很快!

存在意义:

        在复用的过程当中,父类的方法不一定完全适用于子类,在这个时候就涉及到方法的重写了。

四、Java修饰符、普通方法、构造器:
1.Java修饰符:

本类

子类

同包

不同包

public

可以访问

可以访问

可以访问

可以访问

protected

可以访问

可以访问

可以访问

无法访问

不写

可以访问

可以访问

可以访问

无法访问

private

可以访问

无法访问

无法访问

无法访问

public 修饰的代码,其他类都可以访问

private 修饰的代码,本类是可以访问的,但是其他类不可以访问

2.方法的特点

1.方法是有访问权限的

2.方法必须写上返回数据的类型,如果不需要返回数据就写void

3.在同一个类当中,方法名可以相同但是方法的签名不能相同(方法的签名=方法名+参数列表的类型) ------>从此引申出方法的重载

4.方法上可以使用其他的关键字进行修饰,比如static和final,它们有这不同的意义

3.构造器、构造器的特点

1.构造器是指在创建对象的时候,给对象赋值赋初始值

特点:

1.在类当中构造函数必须和类名相同

2.在类当中有一个默认的不显示的无参数的构造器,一旦在类当中写一个构造器时,无参数的构造器会被覆盖掉。

3.构造器不需要写返回类型

4.一个类当中可以有多个构造函数

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值