JavaSE总结基础语法 - 面向对象中

1. 继承性

1.1 为什么要有类的继承

  1. 为了减少代码的冗余
  2. 便于功能的扩展
  3. 给后面的多态性,提供了前提

1.2 继承性的格式

public class A extends B{}

A为B类的派生类、子类、subclass
B为A类的父类、超类、基类、superclass

1.3 子类继承父类后有哪些不同

子类继承父类后拥有的特性:

  • 子类继承父类的所有的属性与方法
  • 父类中声明的private属性与方法,子类继承父类后,仍然人为是父类中的结构
  • 子类继承父类以后,还能继续声明自己的属性或方法, 实现功能扩展
  • 子类继承父类的关系不同于子集与集合,它属于延展、扩展

1.4 Java中继承性的说明

  1. 一个类可以被多个类继承
  2. Java中只能够单继承
  3. 多个子类继承了同一个父类以后,子类互相之间具有同级的关系
  4. A类继承了B类属于直接继承
  5. A类继承了B类,B类又继承了C类后,A类与C类的关系属于间接继承

2. 方法的重写

子类继承父类以后,可以对父类中同名同参数的方法在子类中进行覆写

什么是重写?

  • 子类对父类中的方法,在子类进行重写,以更好的适用于子类

重写的说明:

  1. 重写的格式: 权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{ //方法体 }
  2. 子类的方法名与形参列表要与父类的相同
  3. 子类的权限修饰符不小于父类的方法
  4. 子类不能对父类中的private修饰的方法进行重写
  5. 子类的返回值类型如果是引用类中则只能是A或A的子类
  6. 子类的返回值如果是基本数据类型,则只能是原本的基本数据类型
  7. 父类中的方法有static不能被重写
public class Person {
    String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person(){
        System.out.println("Person...");
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Student extends Person{
    public Student(){
        System.out.println("Student...");
    }
    @Override
    public String toString() {
        return super.toString();
    }
}

区分重写和重载?

  1. 重写: 在子类中覆盖父类的方法, 重写体现了多态性
  2. 重载: 在同一个类中对同名的方法进行重载, 重载没有体现多态性

3.关键词: super

什么是super?

  1. super是用在子类中调用父类结构的关键字
  2. super可以用在属性、方法、构造器

super调用属性、方法:

  • 我们在子类的方法或构造器中,通过"super.方法"、“super.属性”,显示的调用父类的结构
  • 当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性
  • 当子类重写了父类的方法后,在重写的方法内,想要调用父类被重写的方法时,我们则必须显示调用"super.方法",表明调用的是父类种被重写的方法

super调用构造器:

  • 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
  • "super(形参列表)"的使用,必须声明在子类构造器的首行!
  • 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二一,不能同时出现
  • 在构造器的首行,没显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()
  • 在类的多个构造器中,至少一个类的构造器中使用了"super(形参列表)",调用父类中的构造器

4. 子类对象实例化的全过程

从结果上看:

  • 子类继承了父类就取得了父类的属性与方法
  • 创建子类的对象,在堆空间中就会加载父类的属性

从过程上看:

  • 当我们创建了子类对象时, 我们一定会直接或间接调用父类的父类的…父类构造器,直到java.lang.Object的空参构造器,正因为加载过父类的构造器,才看的到所有直接或间接父类的属性与方法

5. 多态性

  1. 多态性的理解:可以理解为一个事物的多种形态。

  2. 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)

  3. 多态性的使用:虚拟方法调用
    有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
    总结:编译,看左边;运行,看右边。

  4. 多态性的使用前提:
    ① 类的继承关系 ② 方法的重写

  5. 多态性使用的注意点:
    对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

关于向上转型与向下转型:
向上转型:多态
向下转型:

  • 有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。如何才能调用子类特的属性和方法?使用向下转型。
  • 如何实现向下转型:使用强制类型转换符:()
  • 使用时的注意点:
    ① 使用强转时,可能出现ClassCastException的异常。
    ② 为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
  • instanceof的使用:
    ① a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。
    ② 如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。
    ③ 要求a所属的类与类A必须是子类和父类的关系,否则编译错误。

6. Object类的使用

6.1 java.lang.Object类的说明:

  1. Object类是所Java类的根父类
  2. 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
  3. Object类中的功能(属性、方法)就具通用性。
    方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()wait() /notify()、notifyAll()
  4. Object类只声明了一个空参的构造器

6.2 equals()的使用:

  1. 是一个方法,而非运算符
  2. 只能适用于引用数据类型
    说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
  3. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
  4. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
    重写的原则:比较两个对象的实体内容是否相同

7. 包装类

为什么要有包装类(或封装类)?
为了使基本数据类型的变量具有类的特征,引入包装类。

在这里插入图片描述

需要掌握的类型间的转换:(基本数据类型、包装类、String)
在这里插入图片描述

  • 基本数据类型<—>包装类:JDK 5.0 新特性:自动装箱 与自动拆箱
  • 基本数据类型、包装类—>String:调用String重载的valueOf(Xxx xxx)
  • String—>基本数据类型、包装类:调用包装类的parseXxx(String s)
    注意:转换时,可能会报NumberFormatException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值