7、面向对象(二)

75 阅读2分钟

面向对象(二)

1、继承

如果有些类中的属性和方法是重复的,可以将这些属性和方法提取出来组成一个新类,通过extends和这些类产生联系了,这种关系就是继承。

提取出来的新的类称之为父类(超类/基类),原来的类是子类(派生类)。

子类可以继承父类的所有属性和方法,但是只有一部分可见。

继承的优点

  • 继承可以提高代码的复用性

java中是单继承,没有多继承但是可以多层继承

Java中所有的类都有一个共同的父类Object

2、重写

重写就是在父类和子类拥有相同方法签名的非静态方法,也叫方法的覆盖

遵从"两等两小一大"原则:可以根据方法修饰符 返回值 方法签名 异常顺着理解

  • 重写的方法权限修饰符范围要大于或者等于父类方法的权限修饰符
  • 如果父类方法的返回值类型是基础数据类型,那么重写的方法的数据类型应该与父类方法一致
  • 如果父类方法的返回值类型是引用数据类型,那么重写的方法的数据类型应该相同或者是该数据类型的子类
  • 方法签名一致
3、super关键字

super:代表父类对象,但并不是一个对象

super的用法:

  • super.方法:调用父类的方法
  • super.属性:调用父类的属性
  • super():调用父类的构造器

注意:子类的默认的无参构造器默认调用了父类的无参构造器,当父类没有无参构造器时子类的无参构造器会编译时报错

4、多态

编译时多态:方法重载

运行时多态:方法重写、向上转型、向下转型

编译时看左边,运行时看右边

向上转型

class A{

}

class B extends A{
    
}

/**
* 对象a只能调用B中的从A继承到的属性和重写了A中的方法;
*/
Public class Test{
    public static viod main(String[] args){
        A a = new B();
    }
}

向下转型:与强制类型转换类似

class A{

}

class B extends A{
 	public viod study(A a){
        System.out.println("向下转型");
    } 
}

Public class Test{
    public static viod main(String[] args){
        A a = new B();
        test(A)
    }
    
    public viod test(A a){
        B b = (B)a;
        b.study;
    } 
}