Java-05面向对象(中)

六、Java-05面向对象(中)

6.1 继承

6.1.1 继承的规则
  1. 子类不能直接访问父类中私有的(private)的成员变量和方法。
  2. Java只支持单继承和多层继承,不允许多重继承
6.1.2 体现
  • 一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。
  •  特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。
    
  • 只有因为封装性的影响,使得子类不能直接调用父类的结构而已。
  • 子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展。
  • 子类和父类的关系,不同于子集和集合的关系。
  • extends:延展、扩展
6.2 this和super的区别
NO区别点thissuper
1访问属性访问本类中的属性,如果本类没 有此属性则从父类中继续查找直接访问父类中的属性
2调用方法访问本类中的方法,如果本类没 有此方法则从父类中继续查找直接访问父类中的方法
3调用构造器调用本类构造器,必须放在构造 器的首行调用父类构造器,必须 放在子类构造器的首行
  • 3.super的使用:调用属性和方法
    • 3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用
    • 父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."
  • 3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的
    • 使用"super.属性"的方式,表明调用的是父类中声明的属性。
  • 3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的
    • 使用"super.方法"的方式,表明调用的是父类中被重写的方法。
  • 4.super调用构造器
    • 4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
    • 4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
    • 4.3 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现
    • 4.4 在构造器的首行,没有显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()
    • 4.5 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器

6.2 多态

父类的引用指向子类的对象

6.2.1 注意
  1. Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明 该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简 称:编译时,看左边;运行时,看右边。
    1. 看的是父类的引用(父类中不具备子类特有的方法)
    2. 看的是子类的对象(实际运行的是子类重写父类的方法)
  2. 使用前提:①类的继承关系②方法的重写
6.2.2 instanceof操作符:检验x是否为类A的对象,返回值为boolean型。
public class Person extends Object {}
public class Student extends Person {}
public class Graduate extends Person {}
-------------------------------------------------------------------
public void method1(Person e) {
if (e instanceof Person) 
// 处理Person类及其子类对象
if (e instanceof Student) 
//处理Student类及其子类对象
if (e instanceof Graduate)
//处理Graduate类及其子类对象
}

image-20210417092846325

6.2.3 ==和 equals的区别
  1. == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型 就是比较内存地址
  2. equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也 是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中 用的比较多,久而久之,形成了equals是比较值的错误观点。
  3. 具体要看自定义类里有没有重写Object的equals方法来判断。
  4. 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。
6.2.4 基本类型、包装类与String类间的转换
image-20210417160443507
### 回答1: 覆盖,又称重写或重载,是面向对象编程的一种重要概念。它指子类对父类已有的方法进行重新定义,使得子类方法能够覆盖父类方法,从而实现多态性。 要使用覆盖,需要遵循如下规则: - 方法名、参数列表、返回类型必须完全一致 - 方法的访问权限不能比父类方法更严格 - 方法的异常类型不能比父类方法更广 覆盖有助于提高代码的复用性和可维护性。 ### 回答2: 面向对象编程最重要的概念之一是覆盖。覆盖发生在两个有继承关系的类之间,其,子类覆盖了父类方法。简单来说,子类方法与父类方法具有相同的名称和参数列表。 覆盖主要包括三个方面的内容:方法名称、参数列表以及返回类型。在覆盖的过程,子类可以改变任何一个或多个方面的内容,但只要方法的名称和参数列表相同,就可以进行覆盖。 覆盖的主要作用是实现多态性。在面向对象编程,多态指的是同一个方法或同一个类在不同的情况下表现出不同的行为。例如,一个父类有一个run方法,这个方法被多个子类继承并覆盖,这些子类的run方法可以根据不同的需要执行不同的代码,这就是多态性的体现。 需要注意的是,在进行覆盖时,子类的方法访问控制符不能低于父类的方法访问控制符。例如,如果父类的方法是public,那么子类的方法也必须是public,不能是private或protected。 覆盖还有一些注意事项。首先,覆盖必须使用@Override注解,这样可以确保方法签名的正确性。其次,在覆盖过程,可以使用super关键字调用父类的方法实现,这个功能非常有用。 最后,需要注意的是,覆盖只适用于非静态方法。静态方法不受覆盖影响,因为静态方法是根据类调用,而不是根据对象调用。 总之,覆盖是面向对象编程非常重要的一个概念。它可以实现多态性,并且可以根据不同的需求调用不同的方法实现。同时,需要注意覆盖的访问控制符、使用@Override注解以及调用父类方法的方式。 ### 回答3: Java的覆盖指的是在子类使用相同的方法名称、参数列表和返回类型重新定义父类已经存在的方法,从而达到替代父类方法的效果。 父类方法被子类覆盖后,当调用子类对象的该方法时,实际上是优先调用子类方法,而不是父类方法。这就是覆盖的作用。 覆盖也可以称作重写,其实质是子类继承了父类的方法,并重新实现了这些方法,从而强化了子类对这些方法的掌控能力,实现了更加灵活的程序设计。 在将一个方法覆盖时,需要注意以下几点: 1.方法名称、参数列表、返回类型必须与被覆盖的方法相同,否则无法实现覆盖。 2.子类覆盖的方法不能比父类方法访问级别更严格,例如:如果父类方法为public,那么子类被覆盖的方法也必须为public,不能为private或者protected。 3.被覆盖的方法不能为final或者static,因为final的方法不能被重新定义,而static的方法不属于任何对象,不能被继承。 在实际程序设计,也需要注意覆盖的使用方式。例如,当父类方法被覆盖时,子类方法可以根据需要选择是完全重写父类方法,还是在父类方法的基础上增加新功能。同时,在使用super关键字调用父类被覆盖的方法时,需要注意调用的方式和位置,避免出现死循环或者错误的调用结果。 总的来说,覆盖是Java一个重要的特性,它使得程序设计更加灵活,同时也需要程序员在设计时根据实际需要合理使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值