• java面向对象进阶


    java面向对象进阶

    活动地址:CSDN21天学习挑战赛

    用来管理不同的类,利于程序的管理和维护

    包名建议全部英文小写

    package com.www.javabean;
    public class Student{
        
    }
    
    • 1
    • 2
    • 3
    • 4

    建包语句必须写在第一行

    • 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用

      import 包名.类名
      
      • 1
    • 假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问

    权限修饰符

    用来控制一个成员能够被访问的范围

    可以修饰成员变量,方法,构造器,内部类

    private -> 缺省-> protected ->public

    在这里插入图片描述

    自定义成员一般应满足的要求:

    1. 成员变量一般私有
    2. 方法一般公开
    3. 本类 + 同一个包内的其他类 + 子类 访问 --> protected
    final

    final 关键字可以修饰(类 方法 变量)

    • 修饰类:表明该类是最终类,不能被继承
    • 修饰方法:表明该方法是最终方法,不能被重写
    • 修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次
    • final修饰的变量是基本类型:那么变量存储的数据值不能发生改变
    • final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的
    常量
    • 使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变

    • 常量名的命名规范:英文单词全部大写,多个单词下划线连接起来

    • 常量的作用:通常用来记录系统的配置数据

    • 在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。

    枚举
    修饰符 enum 枚举名称{
        第一行罗列枚举类实例的名称
    }
    
    enum Season{
        SPRING,SUMMER,AUTUMN,WINTER;  //分号
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 枚举类都是继承了枚举类型:java.lang.Enum

    • 枚举都是最终类,不可以被继承

    • 构造器都是私有的,枚举对外不能创建对象

    • 枚举类的第一行默认都是罗列枚举对象的名称的。

    抽象类

    abstract 可以修饰类,成员方法

    abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法

    修饰符 abstract class 类名{
        修饰符 abstract 返回值类型 方法名(形参列表);
    }
    
    • 1
    • 2
    • 3
    public abstract class Animal{
        public abstact void run();
    }
    
    • 1
    • 2
    • 3
    • 抽象方法只有方法签名,不能声明方法体。

    • 一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错

    • 抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。具体实现交给子类去完成

    • 一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

    • 类有的成员(成员变量、方法、构造器)抽象类都具备

    • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

    • 不能用abstract修饰变量、代码块、构造器。

    • 抽象类不能创建对象

    • abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承

    • 抽象方法定义通用功能让子类重写,final定义的方法子类不能重写。

    • 模板方法建议使用final 修饰, 模板方法是给子类直接使用的,不是让子类重写的,加上final后可以防止子类重写了模板方法

    多态

    常见形式

    父类类型 对象名称 = new  子类构造器();
    
    • 1
    • 方法调用:编译看左边,运行看右边。 --> 调用子类的方法
    • 变量调用:编译看左边,运行也看左边 --> 调用父类的成员变量

    多态的条件

    • 有继承/实现关系;
    • 有父类引用指向子类对象;
    • 有方法重写(多态侧重行为多态)

    定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。

    多态下不能使用子类的独有功能

    多态类型转换
    1. 自动类型转换 子类-> 父类

    2. 强制类型转换 父类-> 子类

      • 从父到子( 必须进行强制类型转换,否则报错): 子类 对象变量 = (子类)父类类型的变量

      • 建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换

        变量名 instanceof 类型
        判断变量是否是类型或者是其子类类型,是则返回true
        
        • 1
        • 2
  • 相关阅读:
    第19章_体系结构
    LeetCode - 解题笔记 - 216 - Combination Sum III
    模型保存和加载
    RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
    【算法】最优乘车——bfs(stringsteam的实际应用,getline实际应用)
    java运算符
    golang工程——gRPC keep alive 配置
    Sharding-JDBC实现读写分离
    安装docker版elasticsearch和kibana
    简单了解HTTP、Websocket和Netty
  • 原文地址:https://blog.csdn.net/first_bug/article/details/126356862