Java笔记-06 面向对象进阶

这篇博客探讨了Java的面向对象特性,包括继承、重写、Object类的toString和equals方法,以及super关键字的使用。此外,还介绍了封装、多态、final关键字、数组操作、抽象方法、接口和内部类的概念,提供了丰富的示例和实践建议。
摘要由CSDN通过智能技术生成

继承

  • 继承实现类的扩展
  • 父类也称作超类、基类、派生类等。
  • Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
  • Java中类没有多继承,接口有多继承。
  • 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
  • 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
package MyPro05;
class Person{
   
    String name;
    int height;
    public void rest(){
   
        System.out.println("休息...");
    }
}
class Student extends Person{
   
    String major;
    public Student(){
   

    }
    //构造器,继承了Person的name和height
    public Student(String name,int height,String major){
   
        this.name = name;
        this.height = height;
        this.major = major;
    }
    public void study(){
   
        System.out.println("学习...");
    }
}
public class TestExtends {
   
    public static void main(String[] args) {
   
        Student stu = new Student();
        stu.name = "霹雳火秦明";
        stu.height = 189;
        stu.study();
        stu.rest();
    }
}
  • 查看类的继承关系,选中类后,IDEA中快捷键Ctrl+h,或者右键diagram
    在这里插入图片描述
  • instanceof: instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则,返回false。是个运算符,像 + - * /那样用
        System.out.println(stu instanceof Student); //true
        System.out.println(stu instanceof Person); //true

重写

  • 子类替换父类的行为。
  • “==”: 方法名、形参列表相同。
  • “≤”:返回值类型和声明异常类型,子类小于等于父类。子类方法的返回类型是父类方法返回类型的本身或子类。
  • “≥”: 访问权限,子类大于等于父类。
class Veichle{
   
    void run(){
   
        System.out.println("跑....");
    }
    void stop(){
   
        System.out.println("静止不动");
    }
    Person passager(){
   
        return new Person();
    }
    int numbers(){
     //重写时不能是double float其他类型
        return 1;
    }
}
class Horse extends Veichle{
   
    @Override
    void run(){
   
        System.out.println("驾。。。驾。。。");
    }
    @Override
    void stop(){
   
        System.out.println("吁。。。。");
    }

    @Override //返回类型可以为Person的子类,不能是父类
    Student passager() {
   
        return new Student();
    }

}
public class TestOverride {
   
    public static void main(String[] args) {
   
        Horse h  = new Horse();
        h.run();
        h.stop();
    }
}

  • 快捷键 Alt + 7查看类的所有字段和方法
    在这里插入图片描述

Object类

  • Object类是所有Java类的根基类,也就意味着所有的Java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。
 * Class {
   @code Object} is the root of the class hierarchy.
 * Every class has {
   @code Object} as a superclass. All objects,
 * including arrays, implement the methods of this class.

toString方法

  • 返回类名和hashCode的字符串。
public String toString() {
   
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
  • 重写toString
    @Override
    public String toString() {
   
        return "哈哈哈";
    }

equals方法

  • == 符号,比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。
  • equals 判断提供定义“对象内容相等”的逻辑
    public boolean equals(Object obj) {
   
        return (this == obj);
    }
  • 自定义equals方法,单击右键generate自动生成
package MyPro05;

class User{
   
    int id;
    String name;
    String passed;


    public User(int id, String name, String passed) {
   
        this.id = id;
        this.name = name;
        this.passed = passed;
    }

    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return id == user.id;
    }

}
public class TestEquals {
   
    public static void main(String[] args) {
   
        User u1 = new User(1,"玉麒麟","001");
        User u2 = new User(1,"卢俊义","002");
        System.out.println(u1 == u2); //是否为同一个对象 false
        System.out.println(u1.equals(u2)); //判断是否相等,根据id判断,true

    }
}

super

  • super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
  • 若是构造方法的第一行代码没有显式的调用super(…)或者this(…);那么Java默认都会调用super(),含义是调用父类的无参数构造方法 。这里的super()可以省略。构造时从祖宗Object往子孙开始构造,静态初始化块也是如此。
//在子类中调用
super.value;
super.method();
  • 属性/方法查找顺序:(比如:查找变量h) 1. 查找当前类中有没有属性h 。2. 依次上溯每个父类,查看每个父类中是否有h,直到Object 3. 如果没找到,则出现编译错误。 4. 上面步骤,只要找到h变量,则这个过程终止。

封装

  • 作用:1. 提高代码的安全性。 2. 提高代码的复用性。 3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。 4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。
  • 访问控制符 修饰成员变量、方法,类可以default和public,1. private 表示私有,只有自己类能访问
    2. default表示没有修饰符修饰,只有同一个包的类能访问
    3. protected表示可以被同一个包的类以及其他包中的子类访问
    4. public表示可以被该项目的所有包中的所有类访问
  • 规则 1. 一般使用private访问权限。 2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独孤尚亮dugushangliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值