04.JAVA类和对象(封装继承多态+对象+类划分+权限修饰符+成员属性+方法行为)

编程思想

封装

核心目的隐藏内部实现细节,提供公共接口以便使用者进行交互,增加代码的可维护性和安全性

相关概念:类、对象、成员变量、方法、访问修饰符(public、private、protected、默认)。

生活举例暗箱抽奖。将所有的票券(表示成1、2、3等数字,约定1是一等奖,大于5是不中奖)都放入盒子,留一个口,只允许一只手进去,且只允许拿一张票出来,在这个例子中,暗箱的作用就是随机出一个结果,且只提供了一个输入输出接口(窗口),进去的手相当于传入参数,拿出来的票代表的数字结果相当于输出参数。这种暗箱除了可以用于抽奖,也可以用于工作排班、团队分组等不同的场景,我们只需要为每个数字赋予不同的含义即可,这就是复用。同理,java自身提供的众多类就是基于此,它提供若干个接口,且规定了输入输出的数据规范。

封装体现了面向对象的设计原则,即我不关心你怎么达到某个要求,不关心过程,我只关心我需要付出什么,可以得到什么。面向对象与面向过程相对,他们的区别有点像中药和西药的区别,有句广告叫作中药好,西药快,某种重度也适用于面向对象与面向过程,前者只要好用有效就成,你什么药物作用原理我不关心,后者则需要根据物理等逻辑进行验证,强调代码的高效。

又比如出行线路选择,老王从A站乘高铁线路1到C,在 Java 中,A、C是输入输出,线路、交通工具就是方法内容,面向对象中我们只需要考虑AC,面向过程则是要考虑用哪种交通工具,A和C中间过了哪些站点,是否换乘,每阶段用了多少分钟等具体的过程。

PS:封装以类作为核心概念对象,可以应用于包、类(API)、方法(主要体现在只需注意输入输出)和属性(主要体现在访问私有)。

继承

核心目的:实现代码复用,提高代码的可扩展性和可维护性

相关概念:父类(超类、基类)、子类(派生类)、super 关键字。

生活举例对公共部分,继承则拥有。有点类似于高中生物中 DNA 基因遗传特性,龙生龙,凤生凤,老鼠的孩子会打洞。比如影视小说中的师徒,只要拜入某某师傅门下成为其弟子,就可以被传授某某(基本)功法,某某(基本)武功等等,这种师徒关系就可以类比为继承,而一旦拜师就可以拥有的技能,就类比于一旦继承就可以有的属性或方法(非私有),一般来说,越是基本的东西越具有广泛型和适用性,越具有被继承的基础。

PS:继承关系主要用于描述的类与类之间的关系,方法一般直接调用,以实现代码复用。

多态

核心目的:提高代码的灵活性和可扩展性,增加代码的可读性和可维护性,继承是多态的基础之一。

相关概念:父类引用指向子类对象、方法重载、方法重写、接口和抽象类。

生活举例:可以理解为方法在继承的基础上的发展或创新。与继承做对比举例,似于高中生物中 DNA 基因变异特性(一个人两只手,每只手五根手指就是继承遗传,指纹不同,大小肤色指纹等细微的差异就是变异多态),龙生九子,子子不同。以师徒来说,徒弟继承了师傅的技能,如讲笑话技能,那么实现讲笑话效果的过程、效果等就是多态,比如师傅喜欢讲动物笑话,徒弟喜欢历史笑话,师傅喜欢对儿童讲,徒弟喜欢对中学生、大学生讲,受众就相当于方法的输入。

PS:多态更倾向于描述方法的多种实现形式,构造方法的重载和普通方法的重写是多态的主要表现形式。

类与对象

类的概述:类是面向对象编程的核心概念之一。类是用于创建对象的模板或蓝图,它定义了对象的属性(成员变量)和行为(方法)。Java中的类根据逻辑功能等特征可以分为:普通类、接口类、抽象类、枚举类、内部类等。

定义格式访问修饰符 种类修饰符 class 类名{ ...... }

PS:1、访问修饰符包括 public、private、protected 或默认(无修饰符);

2、种类修饰符包括 interface、abstract、默认(无修饰符)(不包括枚举类、内部内)。

3、最少有一个抽象方法的类就是抽象类。

04.JAVA类和对象(封装继承多态+对象+类划分+权限修饰符+成员属性+方法行为)_第1张图片

/*  普通类  */
public class MyClass {
}
/*  接口类  */
public interface MyInterface {
}
/*  抽象类  */
public abstract class MyAbstractClass {
    // 成员变量
    // 构造函数
    // 抽象方法声明
    public abstract void abstractMethod();
    // 普通方法定义
    public void abstractMethod(){
        LocalClass localClass = new LocalClass(){
            @Override
    		public void reMethod() {
        		System.out.println("内部类方法重写");
    		}
        }
    }
}
/*  枚举类  */
public enum MyEnum {
    // 枚举常量列表
    CONSTANT1,
    CONSTANT2,
    CONSTANT3;
    // 可以添加成员变量、构造函数和方法
}
// PS:每一个 public 类都是一个单独的类class文件
对象

对象概述:是类的实例化结果,它具有状态和行为,并且能够通过调用方法来执行特定的操作,使用 new 关键字和构造函数来创建。

创建格式MyClass obj = new MyClass( )

PS:1、对象具有生命周期,指对象从创建到销毁的整个过程;

2、多个对象可以同时存在,它们具有相同的属性和行为,但可能具有不同的状态;

3、对象在不再被使用(没有任何引用指向)时,会被垃圾回收机制自动销毁。

权限

概述:Java 中的访问权限共有四个等级,开放程度由高到低分别为:public > 默认/无修饰符 > protected > private

PS:1、只能使用 public 或默认/无修饰符;

2、构造方法可以使用 public、private 或默认/无修饰符;

3、成员变量和方法:可以使用 public、private、protected 或默认/无修饰符。

public 公共

protected 受保护

默认(无)

private 私有

同一个类

同包子类

异包子类

不同包类

类的内容

概述:包括属性和行为。属性即类的成员变量,行为即类的方法

成员属性

概述:类中的变量可以分为实例变量(普通变量,成员变量)、静态变量(全局变量)、局部变量、参数变量等。

实例变量:也称为对象变量,每个类的实例都拥有自己的一组实例变量,在类的内部定义,在对象创建时分配内存。

静态变量:也称类变量,用 static 修饰,与类本身关联,与类一起加载并分配内存,而不是与类的实例(对象)关联,被所有对象共享相同。

局部变量:在方法、构造方法或代码块中声明的变量,只在定义的范围中可见,超出范围后被销毁,一般无默认值,必须显式初始化后才能使用

参数变量:指方法或构造方法定义中的传入参数,在被调用时被赋予实际的值,作用范围仅限于方法或构造方法内部。

public class MyClass {
    private int instanceVar;  						// 实例变量
    private static int staticVar;  					// 静态变量
    public void setInstanceVar(int value) {			// value为参数变量
        int localVar = 100;							// localVar为局部变量,需初始化
        instanceVar = value;
    }
}
方法行为

概述:完成某一个特定功能的代码块,从 Java 8 版本开始,类中的方法有普通方法、构造方法、抽象方法、默认方法、静态方法等种类。

定义格式访问修饰符 返回值类型 方法名( 参数列表 ){ ......方法体......; return 返回值; }

内容组成:一般包括方法声明关键字、方法名、传入参数、方法体、返回值等内容。

PS:1、方法必须先定义,再使用;

2、不能在return后面写代码,return意味着方法结束;

3、函数可以不接收返回的值,但必须给出参数(可以为空列表)。

静态

普通

构造

抽象

默认

抽象类

枚举类

接口类

普通类

public interface MyInterface {
    // 抽象方法
    void abstractMethod();
    // 默认方法
    default void defaultMethod() {
        // 方法体
    }
}

class MyClass{
    public static void main(String[] args){			// 静态方法
        String str = new MyClass().intToString(1996);
        System.out.println(str);
    }
    public String intToString(int num){				// 普通方法
        return num + "";			// 返回值
    }
}

你可能感兴趣的:(#,Java,java,intellij-idea)