BCSP-玄子JAVA开发之面向对象编程CH02_ 继承笔记

BCSP-玄子JAVA开发之面向对象编程CH02_ 继承笔记

7.1 继承

继承(Inheritance):面向对象的三大特性之一

7.1.1 定义

  • 一个类获取现有类的所有属性和行为的机制

  • 创建基于现有类的新类,可以重用现有类的属性和方法

  • 可以在新创建的子类中添加新属性和方法

7.1.2 作用

  • 有效的解决了代码的重用问题,使代码拓展更加灵活

  • 从始至终完整的体现了一个应用系统,逻辑更加清晰

  • 增加软件的可扩展性,以适应不同的业务需求

7.1.3 何时使用继承

  • 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等
  • 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
  • 子类和父类之间,子类和父类之间, 应符合is-a关系
  • 继承是代码重用的一种方式, 将子类共有的属性和行为放到父类中
public class XZ04_Student extends XZ04_Extend {
//  extends  后跟继承父级
//	继承 XZ04_Extend 类的所有方法
}

7.1.4 理解继承

不能被继承的父类成员

  • private 成员
  • 子类与父类不在同包,使用默认访问权限的成员
  • 构造方法

访问修饰符 protected

  • 可以修饰属性和方法
  • 本类、同包、子类可以访问

访问修饰符总结

访问修饰符本类同包子类其他
private
默认
protected
public
Extend
+ String name
+ int money
+say()
Student
+ String name
test(String name) : void
package CH05_JAVAObjectOriented;
//继承父类
public class XZ04_Extend /* extends Object*/ {
    public String name = "玄子";
    //    所有的 Java 类都直接或间接地继承了Object类
    private int money;

    public void say() {
        System.out.println("我是父级:XZ04_Extend");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}
package CH05_JAVAObjectOriented;
//继承子类
public class XZ04_Student extends XZ04_Extend {
//  extends  父级:XZ04_Extend  的所有方法
//    Ctrl + H 查看继承结构

    public String name = "XuanZi";

    public void test(String name) {
        System.out.println(name);
        // XuanZiShare
        System.out.println(this.name);
        // XuanZi
        System.out.println(super.name);
        // 玄子
    }
}
package CH05_JAVAObjectOriented;

public class XZ04_Main {
    public static void main(String[] args) {
        XZ04_Student student =new XZ04_Student();
        student.say();
        student.setMoney(1000);
        System.out.println(student.getMoney());
        System.out.println("------------------");
        student.test("XuanZiShare");
    }
}

7.2 Object 类

Object 类是所有 Java 类的祖先,所有的 Java 类都直接或间接地继承了 Object 类

  • 位于 java.lang 包中

  • 在定义一个类时,如果没有使用 extends 关键字,即没有显式地继承某个类,那么这个类直接继承 Object 类

public class XZ04_Extend /* extends Object*/ {
//	默认继承Object类
}

Ctrl + H 查看继承结构树

7.2.1 常用方法

方法说明
toString()返回当前对象本身的有关信息,返回字符串对象
equals()比较两个对象是否是同一个对象。若是,返回true
clone()生成当前对象的一个副本,并返回
hashCode()返回该对象的哈希代码值
getClass()获取当前对象所属的类信息,返回Class对象

java.lang.String 类重写了 Object 类中的 equals() 方法,用于比较两个字符串的值是否相等


7.3 Super 关键字

子类访问父类成员super代表父类对象

  • super 调用父类的构造方法,必须在构造方法的第一个
  • super 必须只能出现在子类的方法或者构造方法中
  • super 和 this 不能同时调用构造方法

7.3.1 访问父类的成员

  • super 只能出现在子类的方法和构造方法中

  • super 调用构造方法时,只能是第一句

  • super 不能访问父类的 private 成员

7.3.2 Super 和 This 的区别

代表的对象不同

  • this:本身调用者这个对象
  • super:代表父类对象的应用

前提

  • this:没继承也可以使用
  • super:只能在继承条件才可以使用

构造方法

  • this(); 本类的构造
  • super(); 父类的构造

7.4 方法的重写

方法的重写或方法的覆盖Override在子类中,根据需求对从父类继承的方法体进行重新编写,以实现子类需求

7.4.1 方法重写的规则

  • 需要先建立父子类关系

  • 重写方法和被重写方法必须具有相同的方法名

  • 重写方法和被重写方法必须具有相同的参数列表

  • 重写方法返回值类型必须和被重写方法的返回值类型相同或为其子类

  • 重写方法不能缩小被重写方法的访问权限

7.4.2 方法重载与方法重写

重载 \ 重写位置方法名参数表返回值访问修饰符
方法重载同类相同不相同无关无关
方法重写子类相同相同相同或是其子类不能比父类更严格
package CH05_JAVAObjectOriented;
//父类
public class XZ05_Extend_B {
    public void test() {
        System.out.println("B执行");
    }
}
package CH05_JAVAObjectOriented;

//子类
public class XZ05_Extend_A extends XZ05_Extend_B {

    @Override
    public void test() {
//        super.test(); 调用父类方法
        System.out.println("A执行");
    }
}
package CH05_JAVAObjectOriented;

public class XZ05_Extend_Main {
    public static void main(String[] args) {
        XZ05_Extend_A a = new XZ05_Extend_A();
        a.test();
        XZ05_Extend_B b = new XZ05_Extend_A();
        b.test();
    }
}

7.5 多级继承

  • 一个类可以继承自某一个类,成为这个类的子类

  • 同时,也可以在自身的基础上创建新的类,即成为它子类的父类

  • Java 中只支持单继承,即每个类只能有一个直接父类

7.5.1 继承关系中的构造方法

  • 类的构造方法执行场景

    • 创建该类的对象时,又称类的实例化

    • 创建该类的子类的对象时,又称子类的实例化

  • Java 虚拟机按照先父类后子类的顺序执行一系列的构造方法

父类属性 > 父类构造方法 > 子类属性 > 子类构造方法 >

7.5.2 子类继承父类时构造方法的调用规则

  • 如果类的构造方法中,没有通过 super 关键字显式调用父类的有参构造方法,也没有通过 this 关键字显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法

    • 在这种情况下,是否写super( );语句,效果是一样的
  • 如果子类的构造方法中,通过 super 关键字显式地调用了父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法

  • 如果子类的构造方法中,通过 this 关键字显式地调用了自身的其他构造方法,在相应的构造方法中遵循以上两条规则

如果存在多级继承关系,则在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类 Object 类的无参构造方法为止


BCSP-玄子JAVA开发之面向对象编程CH02_ 继承笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的IO流是一种用于输入和输出的通用机制。使用它可以读取和写入文件、网络连接、控制台等多种数据源。 下面是一些使用Java中的IO流的示例: 1. 读取文件: ```java File file = new File("file.txt"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); fr.close(); ``` 2. 写入文件: ```java File file = new File("file.txt"); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("Hello, World!"); bw.newLine(); bw.write("This is a test."); bw.close(); fw.close(); ``` 3. 使用URL读取网络资源: ```java URL url = new URL("http://example.com"); URLConnection conn = url.openConnection(); InputStream is = conn.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); is.close(); ``` 4. 读取控制台输入: ```java BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input; while ((input = br.readLine()) != null) { System.out.println("You typed: " + input); } br.close(); ``` 这些示例仅仅是Java中IO流的基础操作,实际上Java中IO流的功能非常强大,可以进行更加复杂的操作,如序列化、压缩、加密等。通过熟练掌握Java中IO流的使用,可以方便地进行文件处理、网络通信、数据存储等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值