【学习笔记】--java面向对象总结

本文详细介绍了Java的面向对象编程思想,包括类与对象的定义、内部类的使用、封装的概念及关键字、继承的特性和注意事项、多态的概念及其在Java中的应用。此外,还探讨了接口的定义、使用步骤和方法,以及静态字段与静态方法的作用。文章以丰富的实例解析了面向对象的各个特性,旨在帮助读者深入理解Java的面向对象编程。
摘要由CSDN通过智能技术生成

JAVA_面向对象

1. 面向对象

1.1 面向对象的思想

  • 概述

    Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

  • 面向过程:强调步骤。

  • 面向对象:强调对象

  • 三大特征:

    • 继承
    • 封装
    • 多态
  • 特点: 面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装继承多态

1.2 类和对象

  • 什么是类

    • 类:是一组相关属性行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。现实中,描述一类事物。
    • 属性:就是该事物的状态信息。
    • 行为:就是该事物能够做什么。
  • 什么是对象:

    一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。

  • 类与对象的关系

    • 类是对一类事物的描述,即是对象的模型,是抽象的
    • 对象是一类事物的实例,是具体的
    • 类是对象的模板,对象是类的实体。

1.3 类的定义

  • 属性:事物的状态信息。
  • 行为:事物能够做什么。
public class ClassName {
   
    //成员变量
    //成员方法
}
  • 定义类:就是定义类的成员,包括成员变量和成员方法。
  • 成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
  • 成员方法:访问修饰符 返回值类型 方法名(参数列表){方法体}
public class Student {
   
    // 成员变量
    String name; // 姓名
    int age;     // 姓名
    // 成员方法
    public void eat() {
   
        System.out.println("吃饭饭!");
    }
    public void sleep() {
   
        System.out.println("睡觉觉!");
    }
    public void study() {
   
        System.out.println("学习!");
    }
}

成员变量(属性):
String name; // 姓名
int age; // 年龄
成员方法(行为):
public void eat() {} // 吃饭
public void sleep() {} // 睡觉
public void study() {} // 学习

注意事项:

  1. 成员变量是直接定义在类当中的,在方法外边。
  2. 成员方法不要写static关键字。

1.4 类的对象的创建和使用

  • 创建的一个Student的对象
//  导包。
import XXX.XXX.Student;
public class Student {
   
    public static void main(String[] args) {
   
        // 类名称 对象名 = new 类名称();
        Student stu = new Student();  // 根据Student类,创建了一个名为stu的对象
        // 使用其中的成员变量,格式:
        // 对象名.成员变量名
        System.out.println(stu.name); // null
        System.out.println(stu.age);  // 0
        System.out.println("=============");
        // 改变对象当中的成员变量数值内容
        // 将右侧的字符串,赋值交给stu对象当中的name成员变量
        stu.name = "小明";
        stu.age = 18;
        System.out.println(stu.name); // 小明
        System.out.println(stu.age); // 18
        System.out.println("=============");
        // 使用对象的成员方法,格式:
        // 对象名.成员方法名()
        stu.eat();
        stu.sleep();
        stu.study();
    }

}
  1. 导包:也就是指出需要使用的类,在什么位置。
    import 包名称.类名称;
    对于和当前类属于同一个包的情况,可以省略导包语句不写。
  2. 创建格式:
    类名称 对象名 = new 类名称();
    Student stu = new Student();
  3. 使用,分为两种情况:
    使用成员变量:对象名.成员变量名
    使用成员方法:对象名.成员方法名(参数)

注意事项:
如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。

1.5成员变量和局部变量的区别

  • 在类中的位置不一样
  • 成员变量:类中,方法外
  • 局部变量:方法中或者方法声明上(形式参数)
  • 作用的范围不一样
    • 成员变量:类中
    • 局部变量:方法中
  • **初始化值的不同 **
    • 成员变量:有默认值
    • 局部变量:没有默认值。必须先定义,赋值,最后使用
  • **在内存中的位置不同 **
    • 成员变量:堆内存,成员变量属于对象,对象进堆内存
    • 局部变量:栈内存,局部变量属于方法,方法进栈内存
  • **生命周期不同 **
    • 成员变量:随着对象的创建而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

1.6 内部类

内部类就是一个类里面还包含另一个类

分类:

  1. 成员内部类
  2. 局部内部类(包含匿名内部类)
1.6.1 内部类的格式
  • 成员内部类

    格式:

    修饰符 class 外部类名称 {
         
        修饰符 class 内部类名称 {
         
            // ...
        }
        // ...
    }
    

    注意:内用外,随意访问;外用内,需要内部类对象。

  • 局部内部类

    如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。只有当前所属的方法才能使用它,出了这个方法外面就不能用了。

    格式:

    修饰符 class 外部类名称 {
         
        修饰符 返回值类型 外部类方法名称(参数列表) {
         
            class 局部内部类名称 {
         
                // ...
            }
        }
    }
    
  • 类的权限修饰符(能否使用)

    修饰符 外部类 成员内部类 局部内部类
    public Y Y N
    protected Y Y N
    default N Y N
    private N Y N
1.6.2 内部类使用
成员内部类的使用
  • 两种方法

    • 间接方式:

      在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。

    • 直接方法:

      外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
      //或 如果内部类使用Static修饰则可使用这种方式去创建内部类的对象
      外部类名称.内部类名称 对象名 = new 外部类名称.内部类名称();
      

    例如:

    public class Car {
         
        private String name;
        public void setName(String name) {
         
            this.name = name;
        }
        public String getName() {
         
            return name;
        }
        public void methodCar() {
         
            System.out.println("外部Car的方法");
            // 调用内部类的方法
            Engine engine = new Engine();
            engine.methodEngine();
        }
        // 定义一个内部类(成员内部类)
        public static class Engine {
         
            // 内部类的方法
            public void methodEngine() {
         
                System.out.println("发动机点火");
            }
        }
    }
    
局部内部类的使用

局部内部类,只有当前所属的方法才能使用它。

注意:

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。

备注:从Java 8+开始,只要局部变量事实不变,那么final关键字可以省略。

原因:

  1. new出来的对象在堆内存当中。
  2. 局部变量是跟着方法走的,在栈内存当中。
  3. 方法运行结束之后,立刻出栈,局部变量就会立刻消失。
  4. 但是new出来的对象会在堆当中持续存在,直到垃圾回收消失。
1.6.3 * 匿名内部类

匿名内部类是为了省略接口的实现类,直接使用new来重写接口的抽象方法。

格式:

接口名称 对象名 = new 接口名称() {
   
    // 覆盖重写所有抽象方法
};
public class Demo03AnonymityClass {
   
    public static void main(String[] args) {
   
        MyInterface myInterface = new MyInterface() {
   

            @Override
            public void method() {
   
                System.out.println("匿名类重写抽象方法");
            }
        };
        myInterface.method();
    }
}

注意事项:

  1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。
  2. 匿名对象,在【调用方法】的时候,只能调用唯一一次。
  3. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】

2. 面向对象特征——封装

2.1封装的概念

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

2.2 封装的关键字——private

  • private的含义:
  1. private是一个权限修饰符,代表最小权限。
  2. 可以修饰成员变量和成员方法。
  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问,不可被继承。
  • private的使用格式

    private 数据类型 变量名 ;
    
  • **使用 private 修饰成员变量,代码如下 **

    public class Student {
         
        private String name;
        private int age;
    }
    

    注: 使用了private本类可以直接访问,但是在类外无法直接进行访问

  • 使用settergetter方法间接访问private的成员变量

    public class Student {
         
        private String name;
        private int age;
        public void setName(String n) {
         
            name = n;
        } 
        public String getName() {
         
        	return name;
        } 
        public void setAge(int a) {
         
            age = a;
        } 
        public int getAge() {
         
        	return age;
        }
    }
    

    注:必须叫setxxx或者是getxxx命名规则。
    对于Getter来说,不能有参数,返回值类型和成员变量对应;
    对于Setter来说,不能有返回值,参数类型和成员变量对应。

  • 对于boolean类型的private成员变量的Getter方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值