架设仿冒网站挂马,关于征求网站建设的意见,建站的好公司,自学网站开发流程目录
一. 继承
1. 为什么需要继承
2. 继承的概念
3. 继承的语法 4. 访问父类成员
4.1 子类中访问父类的成员变量
4.2 子类中访问父类的成员方法
5. super关键字
6. super和this关键字 7. 子类构造方法
8. 代码块的执行顺序 9. protected访问修饰限定符
10. 继承方式…
目录
一. 继承
1. 为什么需要继承
2. 继承的概念
3. 继承的语法 4. 访问父类成员
4.1 子类中访问父类的成员变量
4.2 子类中访问父类的成员方法
5. super关键字
6. super和this关键字 7. 子类构造方法
8. 代码块的执行顺序 9. protected访问修饰限定符
10. 继承方式
11.final关键字
12. 继承与组合
结语 一. 继承
1. 为什么需要继承
在Java中类是对现实生活中一组对象的抽象描述是创建对象的模板经过实例化后的对象可以用来表示现实中的实体但是我们可以发现很多事物是存在一些关联的比如永劫无间中的治疗型英雄和进攻性英雄、他们都是英雄角色 用我们的Java语言该如何实例化一个永劫无间中的英雄对象呢
public class Therapeutic {//治疗型public String name ;//表示名字public int age;//表示年龄public int HP;//表示血量public Therapeutic(String name, int age, int HP) {this.name name;this.age age;this.HP HP;}public void run(){System.out.println(this.name 正在跑...);}public void used_Treatskill(){System.out.println(this.name使用了治疗技能...);}
}public class Offensive {//进攻型public String name ;//表示名字public int age;//表示年龄public int HP;//表示血量public Offensive(String name, int age, int HP) {this.name name;this.age age;this.HP HP;}public void run(){System.out.println(this.name 正在跑...);}public void used_Offensive_skill(){System.out.println(this.name使用了进攻技能...);}
}
通过上述代码我们可以发现在我们的进攻型英雄和治疗型英雄的中存在大量的重复代码如图所示 那么有什么办法能够将这些共性抽取来减少代码的冗余和增加代码的复用性呢那么在我们面向对象的思想中提出了继承的概念专门用来进行共性抽取实现代码复用。
2. 继承的概念
在Java中继承是面向对象编程的重要特性之一它允许一个类子类继承另一个类父类的属性和方法从而减少代码的冗余和实现代码的复用继承主要解决的问题就是共性的抽取实现代码复用。
例如上述说的治疗型英雄和进攻型英雄都是英雄人物那么我们可以将共性的内容进行抽取。
3. 继承的语法
在实现上述例子继承关系之前我们先来学习一下继承的语法。在Java中要实现类之间的继承关系我们需要借助extends关键字
修饰符 class 子类 extends 父类 {内容// ...
}
那么对于上述例子我们就可以重新设计 //英雄类
public class Heroic_Characters {public String name ;//表示名字public int age;//表示年龄public int HP;//表示血量public Heroic_Characters(String name, int age, int HP) {this.name name;this.age age;this.HP HP;}public void run(){System.out.println(this.name 正在跑...);}
}//治疗型英雄类
public class Therapeutic extends Heroic_Characters {public Therapeutic(String name, int age, int HP) {super(name, age, HP);}//治疗型public void used_Treatskill(){System.out.println(this.name使用了治疗技能...);}
}
//进攻型英雄类
public class Offensive extends Heroic_Characters{public Offensive(String name, int age, int HP) {super(name, age, HP);}//进攻型public void used_Offensive_skill(){System.out.println(this.name使用了进攻技能...);}
} 继承后。子类会继承父类中的成员变量和成员方法如果子类和父类的成员变量、成员属性都相同。那么继承就变得没有意义所以子类继承父类后需要有自己特有的成员或者方法体现出与父类的不同。 4. 访问父类成员
子类继承父类之后在子类中我们能否直接访问从父类继承下来的成员呢
此时我们分为两种情况 子类中访问父类的成员变量 子类和父类中不存在同名的成员变量子类和父类中存在同名的成员变量 子类访问父类中的成员方法 成员方法名字不同成员方法名字相同 4.1 子类中访问父类的成员变量
1.子类和父类中不存在同名的成员变量 2.子类和父类中存在同名的成员变量 总结在子类访问成员变量时如果访问的成员变量在子类中存在那么优先访问子类自己的成员变量如果子类没有再去父类中找如果子类和父类都没有那么就会报错。 4.2 子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 总结当子类成员方法和父类成员方法名字相同时优先从子类中找如果子类没有就去父类找。都找不到则进行报错处理。 那么如果我想在子类和父类成员变量或成员方法相同的情况下访问父类的成员该怎么办呢
5. super关键字
当我想实现上述的情况时这时候就要引入Java中提供的关键字super来解决该关键字的作用就是在子类方法中访问父类的成员。 在子类方法中想要明确访问父类中的成员变量和方法借助super关键字就好啦但是super只能在非静态方法中使用。
6. super和this关键字
相同点不同点super 1. 都是Java中的关键字 2. 只能在非静态方法中使用访问非静态的成员 3.在构造方法中调用时必须是第一条语句 1.this表示的是当前对象的引用supe表示的是从父类继承下来的部分成员的引用 2. 在非静态成员方法中 this 用来访问本类的方法和属性 super 用来访问父类继承下来的方法和属性 3. 在构造方法中 this( ) 用于调用本类构造方法 super( ) 用于调用父类构造方法两种调用不能同时在构造 方法中出现 4. 构造方法中一定会存在 super(...) 的调用用户没有写编译器也会增加但是 this(...) 用户不写则没有 this 7. 子类构造方法
当我们子类对象构造的时候我们会先调用父类的构造方法先构造父类对象再执行子类的构造方法 那么为什么会出现这样情况呢 子类对象中成员是有两部分组成的父类继承下来的以及子类新增加的部分 。父子父子肯定是先有父再有子那么在构造子类对象时候 先要调用父类的构造方法将从父类继承下来的成员构造完整 然后再调用子类自己的构造方法将子类自己新增加的成员初始化完整。 这里有个注意事项 1. 若父类显式定义无参或者默认的构造方法在子类构造方法第一行默认有 隐含的super() 调用即调用父类构造方法 2. 如果父类构造方法是带有参数的此时需要用户为子类显式定义构造方法并在子类构造方法中选择合适的父类构造方法调用否则编译失败 8. 代码块的执行顺序
代码块分为几个重要的代码块实例代码块和静态代码块那么在有继承关系的时候这几个代码块的执行顺序是怎么样的呢 通过运行结果我们就可以知道代码块的执行顺序是父类静态代码块 -- 子类静态代码块 -- 父类实例代码块 -- 父类构造方法 -- 子类实例代码块 -- 子类构造方法
注意当第二次实例化子类对象时父类和子类的静态代码块都将不会再执行 9. protected访问修饰限定符 为了实现封装特性 Java 中引入了访问限定符主要限定类或者类中成员能否在类外或者其 他包中被访问。 1. 被public修饰 此时的Dog类和Main类在不同的包底下并且不是继承关系但是在Main类中任然能够访问Dog类中的成员变量 所以public的权限是最广的。
2. 被protected修饰 此时的Dog类和Main类在不同的包底下是继承关系在Main类中能够访问Dog类中的成员变量 那么这就是protected访问修饰符的权限不同包有继承关系的类能够访问如果不继承的话 就会像上图中一样发生报错。这里有一个很重要的注意事项 被protected修饰可以访问不同包的有继承关系的类但是访问的时候我们是需要通过new子类对象来进行访问的直接new父类对象是访问不了的 10. 继承方式
在我们的Java中只支持单继承、多层继承、不同类继承同一个类但是不支持多继承 1单继承 这种一个类只继承另一个类的继承方式叫做单继承。
2多层继承 这种一个类继承另一个类此时又有一个类继承该类的继承方式叫做多继承
3不同类继承同一个类 此时狗类和猫类都继承Animal这个类
注意一个类是不能继承多个类的也就是所谓的多继承~是不存在的 11.final关键字 一般我们不希望出现超过三层的继承关系 如果继承层 次太多, 就需要考虑对代码进行重构了 如果想从语法上进行限制继承, 就可以使用 final 关键字final关键字有三种使用方式可以修饰变量、可以修饰成员方法、可以修饰类。 1修饰变量 当我们用final修饰变量的时候就具备了常量的属性此时变量的值是不能进行修改的
2修饰成员方法 当我们的成员方法被final修饰此时的成员方法是不能被重写的
3修饰类 当类被final修饰说明当前类是不能被继承的
12. 继承与组合 组合和继承类似 , 组合也是一种表达类之间关系的方式 , 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法(诸如 extends 这样的关键字 ), 仅仅是将一个类的实例作为另外一个类的字段。 继承表示对象之间是 is-a 的关系 比如狗是动物猫是动物..... 组合表示对象之间是 has-a 的关系 比如水果篮中有苹果、香蕉..... 用代码实现一个组合 那么此时这种表达类之间关系的方式就是一种组合~
结语
那么以上就是本期Java继承的全部内容啦~希望大家收获满满在此感谢大家的观看