前言
这篇文章让我们了解Java中的继承,还有组合,以及相关的拓展
一. 继承(inheritance)引汉瑞特斯 *——*
1.什么是继承?
例如:
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,
所以子类会具有父类的一般特性 也会具有自身的特性。
继承就是子类继承父类的特征和行为。
2.类的继承格式
继承减少了代码的重复性 ,实现代码的复用 话不多说,上例子:
如: 动物:1,狗 2,猫,,,这三个类来说清楚
class Animal{ //父类 public String name; public int age; public void local(){ System.out.println(this.name+"在门口"); } }
class Dog extends Animal{ //子类 public void bark(){ System.out.println(this.name+"狗叫"); } }
class Cat extends Animal{ public void sleep(){ System.out.println(this.name+"睡觉"); } }
- 继承呈现了面向对象程序设计的层次结构,由简单到复杂的认知过程
- 继承主要功能:共性的抽取 实现代码的复用
3.父类成员访问(遵循就近原则)
1.子类中访问父类的成员变量:
- 1.子类和父类中成员变量 不同名 子类可以直接访问父类的成员变量
- 2.子类和父类中成员变量 同名 子类优先访问的是自己的成员变量
2.子类中访问父类的成员方法:
- 1.子类和父类中成员方法 不同名 子类可以直接访问父类的成员方法
- 2.子类和父类中成员方法 同名 子类优先访问的是自己的成员方法
*如果就想访问父类的: (只能在非静态方法中用)
- 加个 super.变量/方法 的形式访问就行
- 加个 super() 的形式 调用父类的 构造方法
4.子类构造方法
在构造子类方法时,先执行父类的构造方法,,然后执行子类的构造方法。因为:
- 子类对象的成员中由两部分,从父类继承下的和子类新添加的。
- 所以在构造子类对象的时候,先调用父类的构造方法,对父类的的成员进行初始化,然后再完善子类的构造方法,然后再调用子类构造方法,对子类新添加的成员初始化完整。
class Animal{ //父类 public String name; public int age; //父类的构造方法 //------------------------ public Animal(String name,int age){ this.name = name; this.age = age; } public void local(){ System.out.println(this.name+"在门口"); } } class Dog extends Animal{ //子类 public Dog(String name,int age){ super(name,age); } public void bark(){ System.out.println(this.name+"狗叫"); } } class Cat extends Animal{ //子类的构造方法 的构造,需要在构造方法中初始化 public Cat(String name,int age){ //调用父类的构造方法,初始化从父类继承的成员对象,并不会生成父类对象 super(name,age) ; } public void sleep(){ System.out.println(this.name+"睡觉"); } } class Test { public static void main(String[] args) { // 调用构造方法, 对子类进行实例化对象 Dog dog = new Dog("老二",12); dog.bark(); Cat cat = new Cat("老二",12); cat.sleep(); }
注意:
- 若父类(一般都有默认的无参构造函数) 有无参构造函数,子类构造方法中第一行默认有隐含的super()调用(调用父类构造方法)
- 如果父类构造方法带有参数,则子类的构造方法中,选择合适的父类构造方法调用,否则编译失败
- 子类构造方法中,调用父类构造方法时,super()必须再第一行,否则报错
- super()只能咋i子类构造方法中出现一次,并且不能与this同时出现
5.super和this
两个都可以再成员方法中访问,成员变量或者方法,都可以作为构造方法中的第一句,
但是两者是由区别的:
1.相同点
- 都是Java中的关键字
- 只能在类的非静态方法中使用,用来访问非静态成员中的方法和字段
- 在构造方法中调用时必须是第一句,不能同时存在
2。不同点
- this访问本类的方法和属性 this()调用本类构造方法,
- super是访问从父类继承下来的方法和属性 super()调用父类构造方法
- 构造方法中一定由super()的调用,而this()用户不屑就没有
6.protected 关键字(受保护)
在类和对象中,为了实现封装的特性,Java引入了访问限定修饰符(Public,protected,default,private),主要限定:类或者类成员能否在类外或者其他包中访问,
protected 在当前类,在当前包的不同类,以及在不同包中的子类可以运用
而不同包中的子类是怎么回事?如下
今后,protected频繁使用
7.继承的方式
1.当继承到某个层次时,我们不建议继续继承,就会用到final
3.如果修饰方法,表示改方法不能别重写
2.继承的方式
继承有单继承,多层继承,不同类继承同一类,但是Java中不支持一类继承多个类,c++中支持
所以 就有 接口 ,来解决多继承的问题
8.组合
和继承类似,可以达到代码的重用,组合仅仅是将一个类的实例作为列一个的字段
继承表示对象之间的关系是is——a的关系:狗是动物,猫是动物
组合表示对象之间的关系是has——a的关系:学校(的组成)
class School{ public Student[]students; public Teacher[]teacher; public School(){ this.teacher=new Teacher[10]; this.students=new Student[10]; } }
总结
这篇文章写的是继承相关的,多态的内容在02篇,希望对大家有帮助,感谢支持,这不得三连走起?/!!,