前言
封装,继承与多态三者为面向对象编程的三大特性,今天我们的主题是后两者继承与多态
在了解继承与多态之前,我们需要先引入一个概念——包
简单来说包就是用来存放Java文件的文件夹,其作用是对类来进行一个分类,便于管理与查找。
不同包中的java文件想要相互访问需要先对包进行导入
导入包的代码如下:
import 包名.类名
特别提醒:当需要导入包中的所有类时,类名替换为*
1. 继承
所谓继承就是子类从父类那里继承父类所有的属性与方法(私有属性与方法除外)
老虎,狮子,熊猫,它们都具有动物的基本特征和行为,所以它们都是动物
这里我们就可以称老虎狮子熊猫为动物的子类
Java继承语法的代码格式如下:
class 子类名 extends 父类名{
}
特别提醒:Java中的继承为单继承,即一个子类只能有一个直接的父类
2. 多态
多态可细分为重载与重写
相同点
重载与重写的相同点是两者均可在类中对方法名相同的方法进行重新定义
不同点
重载
一般用于类中的方法在使用时须接受不同参数的情况
Java重载语法的代码格式如下:
public float A(float B){
}
public int A(int C){
}
方法重载时参数列表不能相同,其中返回值类型并不能区分方法的重载
特别提醒:构造方法也可以实现方法的重载
重写
一般用于子类需要在不影响父类源码的基础上对所继承来的方法进行修改的情况
Java重写语法的代码格式如下:
public class B{
//创建父类B
public void A() {
//父类中的方法A
System.out.println("作为鸟类在天空由翱翔");
}
}
class C extends B{
//创建子类C继承于父类B
public void A() {
//重写从父类中继承来的方法A
System.out.println("作为鸵鸟只能在陆地上拍拍翅膀奔跑");
}
}
重写要遵循“两同两小一大”规则:
两同
1.方法名相同
2.形参列表相同
两小
1.子类返回值类型应比父类返回值类型范围更小或相等
2.子类方法声明抛出的异常变量应比父类方法抛出的异常变量范围更小或相等
一大
1.子类方法的访问权限应比父类方法的访问权限更大或相等
重写覆盖问题
在子类重写完继承的方法后便会覆盖原来继承的方法,如果需要访问被覆盖的方法,便需要使用super关键字
Java super关键字用法的代码格式如下:
public class B{
//创建父类B
public void A() {
//父类中的方法A
System.out.println("作为鸟类在天空由翱翔");
}
}
class C extends B{
//创建子类C继承于父类B
public void A() {
//重写从父类中继承来的方法A
System.out.println("作为鸵鸟只能在陆地上拍拍翅膀奔跑");
super.A();
//在重写后的A方法中使用super关键字调用父类的A方法
}
}
instanceof 运算符
instanceof 运算符的作用是判断所选对象是否为所选类创建,若是会返回 true ,否则返回 false
Java instanceof运算符用法的代码格式如下:
public class B{
//创建父类B
public void A() {
//父类中的方法A
System.out.println("作为鸟类在天空由翱翔");
}
}
class C extends B{
//创建子类C继承于父类B
public void A() {
//重写从父类中继承来的方法A
System.out.println("作为鸵鸟只能在陆地上拍拍翅膀奔跑");
super.A();
//在重写后的A方法中使用super关键字调用父类的A方法
B s=new C();
//用父类B声明对象 s,用子类C创建对象 s
if(s instanceof C){
//通过instanceof运算符判断对象 s 是否是子类C所创建的
}
}
}