Java --- 继承与多态(简述版)

                                                                                                       

1.继承与多态之关键字

        1)super关键字

                在子类中使用super关键字,可以引用当前对象的父类对象;

                 ①在子类中调用父类中被覆盖的方法,格式为:

                        super.methodName([paramlist])

                 ②在子类中调用父类的构造方法,格式为:

                        super.([paramlist])

                 ③在子类中访问父类中被隐藏的成员变量,格式为:

                        super.variableName

                这里,methodName 表示要调用的父类中被覆盖的方法名;paramlist 表示为方法传递的参数; variableName 表示要访问的父类中被隐藏的变量名。

        2)final修饰类

                使用final修饰符可以修饰类、方法和变量

                ①当修饰类时,该类称为最终类(final class),最终类不能被继承。如:

                        Math类、String类

                ②当修饰方法时,该方法不能被子类覆盖。如:

class AA{
    public final void method(){}
}
class BB extends AA{
    public void method(){}        //该语句发生编译错误
}

                 ③当修饰变量时,该变量为常值变量,一旦赋值不能改变。如:

class Test{
    public static final int SIZE = 50;
    public void methodA(final int i){
        i=i+1;                        //该语句产生编译错误,不能改变i的值
    }
    public int methodB(final int i){
        final int j = i + 1;          //该语句没有错误,可以使用i的值
        return j;
    }
}

 

 2.继承和多态之对象上转型和下转型

        子类是父类的特殊化,每个子类的实例也是父类的实例,但反过来不成立。因此,子类对象和父类对象在一定条件下也可以互相转换,这种类型转换一般称为对象转换或造型(casting。对象转换也有自动转换和强制转换之分。

        1)上转型

                由于子类继承了父类的数据和行为,因此子类对象可以作为父类对象使用,即子类可以自动转换为父类对象。如:假设parent是一个父类型引用,child是一个子类型(直接或间接)引用

parent = child;    //子类对象自动转换为父类对象

                把引用类型转换为子类类型称为向上转换(up casting ) 。

                注意:向上转型对象不能操作子类新增的成员变量,不能使用子类新增的方法。

        2)下转型   

                  反过来,也可以将一个父类对象转换成子类对象,这时必须用到强制类型转换“()”,必须确保父类对象是子类的一个实例,否则报错。语法:

                  子类类型 引用名 = (子类类型)父类引用;

                 注意:向下转型对象可以操作父类及子类成员变量和成员方法。

 

3.继承和多态之方法重载

                如果同一个类中包含了两个及两个以上方法名相同,方法参数的个数、顺序或者类型不同的方法,则称为方法重载

        1)判断重载的依据

                ①同一个类中,方法名称一致。

                ②与返回值、访问修饰符无关。

                ③方法参数的个数、类型或者顺序不一致。

        2)构造方法的重载

                ①构造方法的名称必须与类名相同。

                ②构造方法不能有返回值,也不能返回void。

                ③构造方法必须在创建对象时用new运算符调用。

               

//构造方法的重载
pubulic class Employee {
    private String name;
    private int age;
    private double salary;
//无参构造方法
public Employee() {
    this.name = "";
    this.age = 0;
    this.salary = 0.0;
}
//带一个参数构造方法
public Employee(String name){
    this.name = name;
    this.age = 0;
    this.salary = 0.00;
}

 

 4.继承和多态之方法重写

        在子类中创建一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写

        1)方法重写的规则

                ①参数列表必须完全与被重写的方法参数列表相同。

                ②返回的类型必须与被重写的方法的返回类型相同。

                ③访问权限不能比父类中被重写方法的访问权限更低。

        2)方法重写的实现

                ①重写的方法可以使用 @Override 注解来标识。

@Override
public String toString(){
    return "姓名:"+name+"年龄:"+age;
}

                ②父类的成员方法只能被它的子类重写

public class Parent{
    public void display(double i){
        System.out.println(i);
    }
}
//定义Parent类的子类
public class Child extends Parent{
    public void display(double i){    //覆盖父类的display()方法
        System.out.println(2 * i);
    }
}

                  Parent 类中定义了display()方法,Child类的display()与Parent类的display()参数和返回值类型都相同,方法重写但实现不同。

                ③声明为 final 的方法不能被重写。

                ④声明为 static 的方法不能被重写,但是能够再次声明。

                ⑤构造方法不能被重写,private方法不能重写。

                                                                                                       

感谢阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值