上次我为大家写出啦“封装性”,封装性是面向对象三大特性之一是Java学习必备的知识,如没有了解透彻的话请打开下方文章在进行观看一下哦!!今天我们来说一下面向对象三大特性之“继承性”。
学习教程推荐:
- 1.北京高淇Java300集(Java强烈推荐)
Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通 - 2.JavaSE基础全套-从零开始进阶之大神(推荐)
系统教学JavaSE基础全套课程-从0开始进阶至大神_线下录制Java系列课程Java从入门到精通_/JAVA基础/数组/OOP/集合/IO流_ - 3.Java常用类基础实战
【基础夯实】Java常用类实战基础教程_Java八大常用类核心基础_Java常用类基础入门/Java包装类/String类 - 4.Java基础入门必备数学知识【数据结构与算法】(推荐)
Java基础入门必学知识数据结构与算法_Java数据结构与算法基础到进阶/Java基础入门进阶/Java数据结构分析/Java数据结构常见问题_哔哩哔哩_bilibili - 5.Java面向对象编程_OOP基础深入讲解
Java面向对象编程重基础深入讲解_OOP面向对象Java基础干货分享/JavaSE/面向对象编程/OOP程序设计 - 6.GOF23种设计模式-23中设计模式详解课程
GOF23种设计模式讲解_Java gof23种设计模式详解课程_从单例到备忘录模式 23种模式详解
继承性
继承(Inheritance)是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加容易实现对于现实世界的建模。嘿~嘿~我们今天该来啃~啃它~
1、继承及其作用
继承让我们更加容易实现类的扩展。 比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。实现了代码的重用,不用再重新发明*(don’t reinvent wheels)。
从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:
上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;
在我们编程中,如果新定义一个Student类,发现已经有Person类包含了我们需要的属性和方法,那么Student类只需要继承Person类即可拥有Person类的属性和方法。
用代码实现继承如下:
public class Animal {//extends Object
private String color;//颜色
private int age;//年龄
public Animal() {
super();
}
public Animal(String color, int age) { //alt+insert
this.color = color;
this.age = age;
}
public void eat(){
System.out.println("eating ..........");
}
public void sleep(){
System.out.println("sleeping............");
}
public void introduce(){
System.out.println(color+" "+age);
}
}
public class Dog extends Animal{
private String nickName;//昵称
public Dog() {
}
public Dog(String color,int age){
}
public Dog(String color,int age,String nickName){
// this.color = color;
// this.age = age;
super(color,age);
this.nickName = nickName;
}
public void guard(){
System.out.println("Dog guarding......");
}
}
public class Cat extends Animal {
private int eysSight;//视力
public Cat() {
super();//默认调用父类的无参数构造方法
}
public Cat(String color, int age, int eysSight) {
super(color,age);
this.eysSight = eysSight;
}
public void grabMouse(){
System.out.println("Cat grab mouse..........");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog("黑色",3,"旺财");
dog.eat();//从父类继承的方法
dog.sleep();//从父类继承的方法
dog.introduce();//从父类继承的方法
dog.guard();//子类特有的方法
Cat cat = new Cat("花色",3,5);//alt+enter
cat.eat();
cat.sleep();
cat.introduce();
cat.grabMouse();
}
}
“继承”使用要点:
1. 父类也称作超类、基类。子类:派生类等。
2. Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
3. 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
4. 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
2、方法重写
父类的方法introduce()已经无法满足子类的需求,怎么办?同理,Object类的toString()已经无法满足Animal类、Dog类的需求,怎么办??? 其实可通过方法重写(override)解决,或者称为方法覆盖
我们来用代码实现一下:
public class Animal {//extends Object
protected String color;//颜色
private int age;//年龄
public Animal() {
super();
}
public Animal(String color, int age) {
this.color = color;
this.age = age;
}
public void introduce(){
System.out.println(color+" "+age);
}
@Override
public String toString() {
//return super.toString();
return "Animal[color="+color+",age="+age+"]";
}
}
public class Dog extends Animal{
private String nickName;//昵称
public Dog() {
}
public Dog(String color, int age){
}
public Dog(String color, int age, String nickName){
// this.color = color;
// this.age = age;
super(color,age);
this.nickName = nickName;
}
public void introduce(){
//this.introduce();
//super.introduce();
System.out.println(color+" "+this.getAge()+" "+nickName);
}
public void guard(){
//this.guard();
//super.guard();
System.out.println("Dog guarding......");
}
@Override
public String toString() {
//return super.toString()+" "+nickName;
return "Dog[name="+color+",age="+getAge()+
",nickName="+this.nickName+"]";
}
}
如果没有看懂的小伙伴:我再来总分总展示一下,去更清晰的了解
总:方法重载和方法重写(覆盖)是面向对象中两个重要概念,其实这两个概念之间没有什么关系,但是毕竟都是关于方法的,毕竟容易引起混淆。对此我也做了一些归纳,感觉能够把这两个概念很好的区分开。我打算从总体区别、细节区别两个方面来说明。
分:总体的区别:最主要的区别,是解决的问题不同,即作用不同。
重载:overload
同一个类中,在一个类里面为一种行为提供多种实现方式并提高可读性
重写:override
子类和父类间,父类方法无法满足子类的要求,子类通过方法重写满足要求
细节的区别:一个方法的声明自左向右包括权限修饰符、方法返回值、方法名、参数列表、抛出的异常类型等。下面从这几方面说明区别:
总:重载实例:构造方法重载、println()方法重载
重写实例:Object类的toString()、equals()、hashCode()等都可以被子类重写
不知道这样下来能够让你们看懂不
嘿~嘿~~感兴趣的同学快去试一下去~~
以上就是本章节所讲述的全部内容啦,稍后我在更新后续哦,喜欢的伙伴支持一下哦~