java-封装、继承、多态

一.继承中的super关键字与this关键字

1.理解为:父类的

2.super可以用来调用父类的属性、构造器、方法

3.super的使用

3.1 当子类声明了一个属性和父类相同时,如果在子类的构造器或方法中需要使用父类的那个属性,则需要用super显示调用父类属性

3.2 当子类重写了父类的某方法时,如果在子类的构造器或方法中需要使用父类中的该方法,则需要用super显示调用父类方法。

3.3 子类的构造器中显示调用父类中声明的指定构造器 :super(形参),且必须声明在子类构造器的首行。

3.4 在类的构造器中,针对于“this(形参)和super(形参)” 只能二选一,不能同时出现。因为this(形参)也只能放在构造器的首行。

3.5 如果在子类构造器中没有显示调用this或super,则默认调用父类的super().

二 . 方法重写与属性覆盖

1.属性覆盖:如果子类声明的属性名跟父类一样,则调用该属性时得到的是子类的属性值。

2.方法重写:如果子类的方法名(形参) 与父类相同,则称子类重写了父类的该方法。

2.1 子类权限修饰符需>=父类的权限修饰符

2.2.1子类的返回值类型 必须与父类相同或是父类的子类

2.2.2如果父类的返回值类型是void,子类也得是void

2.2.3如果父类的返回值是基本数据类型,则子类也必须是对应的基本数据类型

2.2.4如果父类权限修饰符是privite,则子类不能重写该方法,只能新建一个同名同参的方法。

2.2.5子类抛出的异常必须小于父类抛出的异常。

三.封装

理解为:只暴露必要的方法或属性给使用者,对非必要的属性或方法隐藏,代码模块化。

1.属性封装:将public legs改为private legs ,提供Public setLegs()方法 防止非法赋值。

2.方法封装:将不需要对外暴露的方法设为private ,仅供自己使用。

3.构造器封装:权限修饰符只能<=类的权限修饰符,将构造器设为private ,只能在本类创建对象。如单例的创建。

四.多态性-对象的多态性

理解为:一个事物的多种形态,将父类的引用指向子类的对象。

person p=new Man();//编译看左边(父类),运行看右边(子类)。

1.当p调用子类重写父类的方法时,编译器认为他调用的是父类的方法,但实际执行时是调用的子类的方法---此时父类方法叫虚拟方法,执行时会动态调用子类方法(动态绑定)。--所以我们称多态是运行时行为。

对于多态:只有等到方法调用时,解释运行器才会确定要调用的方法的地址-动态绑定

对于重载:在方法调用之前,即声明方法后,他们的调用地址就确定了(因为形参不同)。--静态绑定

2.p不能调用子类特有的方法。只能调用person声明的结构。(编译不通过 ,编译器认为p 是Person的对象)
如何才能调用子类的特有方法?
2.1.Man m=(Man)p;//高级(父类)向低级(子类) 强制类型转换。
强转风险:精度损失 或ClassCastException
2.2 使用Instanceof


3.多态的使用前提:子类继承父类。注意所有类都继承java.lang.Object类

4.使用场景:省去形参中类型不一样的多个重载方法

4.1 test.eat(new dog());test.eat(new cat);

4.2 public method(Object o); test.method(new dog());

4.3 getConnect (Connection con); con=new MysqlConnect();con=new OracleConnect();

5.对象的多态性 只适用于方法,不适用于属性。父类引用调用属性时还是使用的父类的属性值。

五.instanceof的使用

理解: a instanceof A :判断对象a是否是类A的示例

使用场景:为了避免使用强转时出现异常,先进行instanceof判断,再强转。

P a=new A();

if(a instanceof A ) {

A b=(A)a;

b.A特有方法

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值