Java中类的三要素

一、继承

每个类只能继承一个类,object默认为所有类的父类

子类继承父类之后,实例化子类的时候,系统会先实例化父类对象,先执行父类构造器
关键字:
1.extends:表示继承,用法为<子类>extends<父类>
2.super:表示当前类的父类,用super()表示调用父类的构造方法
3.this:表示当前类的对象,还可以使用this()表示调用当前类的构造方法
4.fanil:被fanil修饰的变量为常量,被fanil修饰的方法不能被重写的,被fanil修饰的类不能被继承
加载过程:
1.加载main方法
2.将父类的static方法分配执行入口
3.main进栈
4.加载子类——->加载父类
上转型对象:将子类实例化为父类,失去了子类新增的方法,和新增的变量,可以操纵父类的对象和方法,
如果方法被重写,调用的是子类重写的方法,上转型对象可以再次强制转换为子类
方法的重写以及隐藏:
隐藏即父类方法被子类覆盖。
方法的重写规则
1.参数个数及对应类型必须相同
2.不得修改返回值
3.不得降低访问级别

继承的特性
子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU2NDI0Nw==,size_16,color_FFFFFF,t_70

二、多态

理论基础:父类引用可以指向子类对象

如:方法形参定义是父类,实际传入的是子类对象

如:返回类型定义是父类,实际返回子类对象

当一个父类存在多个派生类的时候,并且每个派生类都重写了父类中的某个方法,那么父类的该方法在不同的子类中就出现了不同的行为,这就是多态。

关键字abstract:由abstract修饰的方法叫抽象方法,非抽象类子类必须实现抽象父类的所有抽象方法,有abstract方法必须则类必须为abstract类,abstract类中可以有非抽象方法,抽象类不能被实例化,abstract只关心此方法是否存在,而不关心此方法是否被实现。
接口(interface):接口中所有方法都为抽象方法,关键字implements。<子类>
接口和父类:接口指一个方法,父类指一个类别。一个子类只可以有一个父类但可以有多个接口。

前提: 

  • 要有继承关系。
  • 子类要重写父类的方法。
  • 父类引用指向子类。

多态有以下几个特点:

  •  指向子类的父类引用只能访问父类中拥有的方法和属性。
  •  对于子类中存在而父类中不存在的方法,该引用是不能使用的。
  •  若子类重写了父类中的某些方法,在调用这些方法的时候,必定是使用子类中定义的这些方法。

三、封装 

把不能暴露的成员隐藏起来,用公共方法来暴露对该隐藏成员的访问

对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)。把对象和过程包围起来,实际上是将对象隐藏起来,使用者只能通过已定义的接口进行访问,适当的封装可以让程序更便于理解,也使程序更加安全。
封装的访问级别:
public:可被当前类、同一个包中其他类、不同包中的子类、不同包中的非子类访问
protected:可被当前类、同一个包中其他类、不同包中的子类访问
友好的(即什么都没有):可被当前类、同一个包中其他类访问
private:只可被当前类的内部访问

猜你喜欢

转载自blog.csdn.net/qq_30436011/article/details/129381545