java学习笔记(二)

/ 0评 / 0

前文请参考
https://old-blog.manqiu.top/2020/06/05/java-learn-1/


面向对象核心技术

类的封装

封装是面向对象编程的核心思想,封装的载体是类,且对象的属性和行为被封装在这个类中。
看了一下书上给的例子,感觉蛮奇怪的,她并没有讲述清楚这个过程,还是自己查一下吧
定义:将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏。
做法:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性的访问。
具体步骤:

  1. 修改属性的可见性来限制对属性的访问。
  2. 为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
  3. 在赋值和取值方法中,加入对属性的存取限制。

参考:https://blog.csdn.net/weixin_44015669/article/details/90145234
具体以代码来看看是什么意思吧

public class Restaurant {
    private Cook cook = new Cook();
    public void takeOrder(String dish){
        cook.cooking(dish);
        System.out.println("[*] 您的菜做好了");
    }
    public String saySorry(){
        return "[*] 抱歉本餐厅不支持此项服务";
    }
    public static void main(String[] args) {
        Restaurant waiter = new Restaurant();
        System.out.println("[-] 请厨师为我做一份香辣肉丝");
        waiter.takeOrder("香辣肉丝");
        System.out.println("[-] 你们厨师叫什么名字");
        System.out.println(waiter.saySorry());
        System.out.println("[-] 请让厨师给我切一点葱花");
        System.out.println(waiter.saySorry());
    }
    class Cook{
        private String name;
        public Cook(){
            this.name = "Tom";
        }
        private void cutOnion(){
            System.out.println("[*] " + name + "切葱花");
        }
        private void washVegetavles(){
            System.out.println("[*] " + name + "洗菜");
        }
        void cooking(String dish){
            washVegetavles();
            cutOnion();
            System.out.println("[*] " + name + "开始做饭" + dish);
        }
    }
}

看看差不多就明白了8

类的继承

基于某个父类的扩展,并制定出一个新的子类,子类可以继承父类原油的属性和方法,也可以增加原来父类所不具备的属性和方法,或者重写父类中的某些方法。

extends

Child extends parents

子类child集成了父类parents类,也继承了方法和属性

方法重写

在子类中将父类的成员方法名称保留,重新编写父类成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型。
需要注意的是,重写父类方法的时候,修改方法的修饰权限只能从小的范围到打的范围改变,如protected 只能改为public 不能改为private。
如果子类重写了父类方法,又想实现父类原有的方法,使用super关键字

所有类的父类--Object类

在 JAVA 中,所有的类都直接或间接地继承了java.lang.Object类,他是所有类的父类,是 Java 类层中的最高类层,当创建每一个类,除非指定从其他类继承,否则都是继承java.lang.Object

getClass()

该方法会返回某个对象执行时的Class实例,然后通过Class实例调用getName()方法获取类的名称。

getClass().getName()
toString()

该方法会返回某个对象的字符串表示形式,当打印某个类对象的时候,会自动调用其重写的toString方法

public class Hello {
    public String toString() { // 重写toString()方法
        return "Say “" + getClass().getName() + "” to Java";
    }
    public static void main(String[] args) {
        System.out.println(new Hello()); // 打印SayHello类的实例对象
    }
}

将会打印Say “hello” to Java.

equals()

比较两个内容相同的两个字符串和两个test类的对象是否向相等

class V { // 自定义类V
}
public class OverWriteEquals {
    public static void main(String[] args) {
        String s1 = new String("123"); // 实例化两个对象,内容相同
        String s2 = new String("123");
        System.out.println(s1.equals(s2)); // 使用equals()方法调用
        V v1 = new V(); // 实例化两个V类对象
        V v2 = new V();
        System.out.println(v1.equals(v2)); // 使用equals()方法比较v1与v2对象
    }
}
//result:true false

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注