Java的封装、继承、多态

Java的封装、继承、多态

*封装:*隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
*继承:*创建分等级的类、使得子类对象具有父类的属性和方法、或子类从父类继承方法、使得子类具有父类相同的行为。子类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。
*多态:*继承的表现就是多态:一个父类可以有多个子类、而子类里又可以重写父类的方法、每个子类重写代码又不同、自然有多种形式。
如果用父类的变量去引用不同子类的对象、在调用相同方法(该方法可能被子类重写)的时候得到的结果和表现形式就不一样。

继承和多态

继承是面向对象非常重要的特点之一,用好继承能够
使程序具有更好的可扩充性,减少程序的代码量

什么是继承?

创建分等级的类、使得子类对象具有父类的属性和方法、或子类从父类继承方法、使得子类具有父类相同的行为。
例:Car和Truck都具有一些相同的属性和方法、我们将这些共同的属性和方法新建一个类Vehicle类、使得Car和Truck两个类都继承Vehicle类、具有Vehicle类的属性和方法。

继承的作用?

继承是面向对象语言的重要机制。借助继承、可以拓展原有代码、应用到其他程序中、而不必重新编写这些代码(代码跨类的复用)。
例:Vehicle类具有基本的属性和方法Truck继承自Vehicle类。则具备父类Vehicle的所有属性和方法、而我们只需要关心Truck所具备的单独属性或方法。

继承语法:

public class 父类{ }
public class 子类 extends 父类 { }

继承的类型:

java不支持多继承、但支持多重继承
1.单继承:A---->B|B继承A
2.多重继承: A—>B—>C|C继承B、B继承A
3.不同类继承同一个类: A----->B| A----->C|B继承A、C继承A
3.多继承不支持一个类继承多个类

继承的特性:

1.子类拥有父类非private的属性和方法(但不继承构造方法、用自己的构造方法)
2.子类可以拥有自己的属性和方法、即子类继承父类所有属性和方法、也可拥有自己的属性和方法
3.子类可以用自己的方式实现父类的方法(子类继承了父类的方法、同时可以对方法进行适当的修改[方法的重写])
4.Java的继承是单继承、也可多重继承
5.提高了类之间的耦合性(继承的缺点、耦合度高就会造成代码之间的联系紧密,代码独立性越差)

方法的重写(覆盖):

子类继承父类的方法、可以再写一个名称相同的方法实现父类方法的改进变成自己的方法

重写的要求:

1.三同原则:同方法名、同返回值类型、同参数表。
2.子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限。
比如父类中方法使用public、子类中重写方法不能使用private(private比public严格)

方法的重载和重写的区别:

要注意重载和重写的区别,重载既可以发生于一个类,
也可以发生于子类与父类之间(子类继承父类方法,
同时完成方法重载),而重写,则只能是子类重写父
类方法

重载:一个类中多个相同类型和名称的方法参数类型和个数不同
重写:子类对继承父类的方法的改进

多态?(即指多种形态)例如水存在多种形态(气、液、固)

1.继承的表现就是多态:一个父类可以有多个子类、而子类里又可以重写父类的方法、每个子类重写代码又不同、自然有多种形式。
2.如果用父类的变量去引用不同子类的对象、在调用相同方法(该方法可能被子类改写)的时候得到的结果和表现形式就不一样。
在这里插入图片描述

例:子类(Car/Truck)父类(Vehicle)
v1.canRun();v2.canRun();v3.canRun();三者表现不同因为子类在继承父类方法时对方法进行了重写
注意:由父类引用创建对象、只能调用子类从父类继承的方法、而不能调用自己的扩展方法
用父类调用子类方法:一定是子类重写的父类方法、子类调用自己的扩展方法只能由自己创建对象
在这里插入图片描述

super(超类)关键字:被继承的类(父类)称为超类、继承的类称为子类
在这里插入图片描述

解释:子类继承父类的方法但不继承父类构造方法发用super可实现子类使用父类的构造方法
Car是子类的构造方法;内使用super();则实现子类使用父类的构造方法
用super调用父类的构造方法时一定是在第一行代码;
子类调用父类的构造方法后自己本身的构造方法也执行:先使用父类的构造方法再使用自己的

带参数时子类和父类都带有参数:先调用父类再调用子类
当父类无参子类有参时也是先调用无参的父类

Object类

1.Object类是java中所用类的超类(父类)
2.所有类都默认继承自Object类
3.每个类都是用Object类的方法

Object类的三个方法

1.toString();返回该对象的字符串表示、通常该方法会返回一个‘以文本方式表示’的对象的字符串
2.hashCode();返回该对象的哈希吗值。
3.equals();指示某个其它对象是否与此对象‘相等’。

final关键字:

1.final表示最终的、最后的、可以用来修饰类、方法、属性。
2.final修饰的类不能被继承
3.final修饰的方法不能被重写
4.final修饰的属性(变量)不能被改变—就是常量定义的方式

可以看到,对cat用final修饰后,可以修改cat的属性值,但是不能再修改cat对象的引用。这和之前的讲述并无冲突,修改了cat的属性值,但cat本身地址并未变化

例如(Math数学类)

在这里插入图片描述

Object是Java中所有其他类的父类 使用extends关键字可继承父类产生一个新的子类 子类可以拥有与父类同名,但功能不同的方法,即覆
盖父类方法
子类可通过super关键字获得父类的方法 Final关键字可以限定对象、变量、方法、类,使他
们不能被修改

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值