【3-4】《Java面向对象高级知识》——继承、重写和重载、final关键字、抽象类、接口、多态、Object类、内部类、包装类、可变参数、递归

本文深入探讨了Java面向对象的高级知识,包括继承、重写与重载、final关键字、抽象类、接口、多态、Object类、内部类、包装类、可变参数和递归。讲解了继承的格式和内存分析,详细阐述了final、抽象类和接口的使用,对比了重写和重载的区别。此外,还讨论了多态的概念、Object类的方法如toString和equals,以及内部类和包装类的应用。文章最后介绍了可变参数和递归的概念,强调了Java面向对象的重要性。
摘要由CSDN通过智能技术生成

一、继承格式

非常重要的部分!!!

  • 格式:先描述父类,再描述子类,子类通过extends继承父类。
    class Person() {
         
        
    }
    class Student() extends Person {
         
        
    }
    

继承了父类的属性和方法,自己也可以拥有属性和方法。

二、子类实例化内存分析

继承的概念:继承是子类继承父类的特征和行为(属性和方法),使得子类对象(实例)具有父类的实例域和方法,使子类具有父类相同的行为。

  • 继承的规则:Java中只有单继承和多重继承,没有多继承
  • 生活例子理解:
    • 单继承:一个孩子有一个父亲,继承了父亲的行为和特征;
    • 多重继承:一个孩子有一个父亲,他的父亲还有一个父亲,孩子继承了爷爷的行为和特征;
    • 多继承:一个孩子有多个父亲(错误示范),继承哪个父亲的行为和特征?继承会发生错乱。

注意:一个子类只能有一个父类

  • 子类和父类的创建过程:当我们创建子类对象时,内部会首先创建父类对象,父类对象创建完毕之后才会创建子类对象,并且父类对象会作为子类对象中的super存在。
  • 简单来说就是子类拥有了一个父类的内存地址,两个类互相持有对象名称,可以操作父类中public和protected修饰的属性和方法,私有的无法直接操作,可以使用get、set方法获取和设置。

三、super详解

通过supper操作内存中的父对象,创建子对象时自动创建父对象。通过supper可以访问:

  • 父类构造方法
    • 调用super构造方法的代码,必须写在子类构造方法的第一行。
  • 父类属性
  • 父类的方法

默认通过无参构造方法来访问,如果父类没有无参构造方法,那子类继承时必须明确写出super来进行调用。

四、重写

1、重写的概念

方法的重写,在类的继承中发生。当继承的某方法不适用子类执行程序时,就把该方法重写一下,当程序执行时,就运行的是重写的这段逻辑。

重写(override)规则:

  1. 参数列表:必须完全与被重写方法的相同
    class Person {
         
        public void say() {
         
            System.out.println("父类中的内容");
        }
    }
    class Student extends Person {
         
        public void say() {
         
            System.out.println("子类中的内容");
        }
    }
    
    此时在main方法中调用say()方法:
    public class Test {
         
        public static void main(String[] args) {
         
            Student s  = new Student();
            s.say();
        }
    }
    
    输出结果为:
    在这里插入图片描述
  • 子类父类中存在同样的方法,运行的是子类,这种情况就是重写。参数列表完全一样
  1. 返回类型:必须完全与被重写方法相同

  2. 访问权限:子类不能比父类权限更低

    子>=父的访问权限

  3. 父类的成员方法只能被它的子类重写

    必须存在继承关系

  4. 声明为static和private的方法不能被重写,但是能再次声明

    静态的跟对象没有关系,本身不存在继承,可以再次声明。

    私有的方法不能重写,不能继承更不能重写。

  • 作用:设计了一个父类,包含了程序的执行流程,但另一个类对服务器进行的指令不同,此时这个类就需要继承父类,并重写子类中的方法。

2、重写和重载的区别

  • 面试题:Java中重写(override)和重载(overload)的区别?

    1. 发生的位置

      重载:一个类中

      重写:子父类中

    2. 参数列表限制

      重载:必须不同

      重写:必须相同

    3. 返回值类型

      重载:与返回值类型无关

      重写:返回值类型必须一致

    4. 访问权限

      重载:与访问权限无关

      重写:子的访问权限必须不小于父的访问权限

    5. 异常处理

      重载:与异常无关

      重写:异常范围可以更小,但是不能抛出新的异常

五、final关键字

  • final用于修饰属性、变量

    • 变量成为了常量,无法对其再次进行赋值。

      • final修饰的局部变量只能赋值一次(可以先声明后赋值)

      • final修饰的是成员属性,必须在声明时赋值

      • 全局常量(public static final)

        任何位置都可以通过类名直接访问的常量。

        常量的命名规范:

        • 由1个或多个单词组成,单词与单词之间用_隔开,单词中所有字母大写
        • 例如:SQL_INSERT
  • final用于修饰类

    • final修饰的类,不可以被继承。
  • final用于修饰方法

    • final修饰的方法,不能被子类重写。

六、抽象类

1、抽象类的概念

一个类中有一个抽象方法(不确定的方法),就称其类为抽象类。

  • 抽象类格式:不写修饰符默认是public,default效果不存在。

    abstract class 类名{
           
        // 抽象类
    }
    
  • 抽象方法格式:abstract修饰且没有方法体,就是抽象方法。

    public abstract void 方法名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值