Java面向对象 继承和多态

class 子类名 extends 父类名{
//类名
}

通过extends实现继承。
子类可定义自己的成员变量与成员方法。
子类继承父类的全部成员(属性和方法),除private的成员和方法

注:Java中只支持单继承,且父类的构造方法不会自动继承。

1.用什么方法让子类借用父类的构造方法呢?

使用super关键字
super关键字代表父类
super.父类成员变量
super.父类成员方法(参数列表)
super(参数列表);
注:super();与this();有类似但也不同
相同:
必须是该方法的第一条执行语句,且单个构造方法中只能出现一次。

2.特别注意:

私有的成员不能被继承
java中 子继承父 是单继承

构造方法不能自动继承,需要调用父类的构造方法,但子类在创建对象时要对继承来自父类的成员进行初始化因此,在创建子类时除了执行子类的构造方法外,还需要调用父类的构造方法,具体遵循原则如下:

①当子类未定义构造方法时,创建对象时将无条件地调用父类的无参构造方法;
对于父类的含参数构造方法,子类可以在自己构造方法中使用super调用它,但super调用语句必须是子类构造方法中的第一个可执行语句;
③子类在自己的构造方法中如果没有用super明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。
如果父类有了有参的构造方法,无参的构造方法就不会使用
this和super不能同时出现,super也需要放在第一句,这与this冲突。

注意:如果我们没有明确声明父类,则默认父类是java.lang.Object类,因此Object类是Java中所有类的直接或间接父类

3. 显式构造方法和隐式构造方法

创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数

子类的构造方法如果没有显式的调用父类的构造方法会默认添加super();即父类的无参构造方法,如果父类没有无参构造方法就会报错

但是接下来我说的就是一个小重点—>在继承当中,子类继承父类的属性和继承方法的方式上有所差别:
—>**父类属性不可被重写,只会被调用,父类方法可以被重写,也可以被调用**

—>一般情况下,当子类中存在和父类同名属性,父类属性会隐藏起来,使用子类的属性,但父类的变量仍占据空间,可用super或父类名来访问。
在多态的情况下,属性被调用时会激活父类属性子类属性隐藏起来
但子类的方法不会隐藏,一旦被重写,只能使用super来调用父类方法在子类中使用

4.重写和重载的区别:

重写:子类和父类方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
注:子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
即用子类对象调用子类中的重写方法。super.方法名() 用于调用父类中的方法
重载:一个类中的方法与另一个方法同名,但是参数表达不同。

重写方法需注意:
在继承关系中,当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。
如果在子类中想调用父类中的那个被重写的方法,我们可以用super.方法名(参数列表)

重写方法时,不能使用比父类中被重写的方法更底的访问权限 。
public ->protected -> default ->private
(高到低)

5.多态

多态三要素:
继承
方法重写
父类引用子类对象

变量是没有多态的
多态也存在弊端,当运用多态机制时,父类引用指向子类,因为保存编译时是从左往右,会看父类中有无此方法,所以子类特有的方法在调用时会出现错误,无法使用,但可以用强制转换,把父类当子类对象使用。
多态的好处,就是参数都是父类的子类,这样可以把其子类当作参数使用,类型为父类。

对象转型:

1.把子类对象当做父类对象来使用,父类引用指向对象

Pet p=new Cat();

2.强制转换
Cat c=(Cat)p;

执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException异常。
instanceof操作符判断一个实例对象是否属于一个类。
例如:Printer p=new Blackprinter();
Colorprinter c=(Colorprinter)p;
运行时就会报错,因为编译时,认为是Clorprinter是printer类,运行时是Blackprinter类型

instanceof是java的关键字
instanceof的语法格式如下:
对象 instanceof 类名
返回值为布尔值(true、false)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值