Java基础面向对象三个特征:继承
Posted jcl226
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础面向对象三个特征:继承相关的知识,希望对你有一定的参考价值。
一、什么是继承?
日常生活我们理解的继承:子女继承父母的财产;徒弟继承师父的功夫/衣钵等等;
计算机中的继承:
1、子类继承父类的属性和行为;如,小猫、小狗都属于动物,具有高度相似的属性和行为(属性:名字、毛色、年龄等;跑、吃东西等)
2、子类也可以拥有自身的特性
3、Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类
二、为什么引入继承?(简答:共性抽取)
以上述小猫、小狗为例,如果各自定义一个类,我们会发现代码具有高度的重复性;
小猫类:
public class Cat { String name; int age; String color; public void eat(){ System.out.println("吃东西呢"); } public void run(){ System.out.println("撒欢"); } }
小狗类:
public class Dog { String name; int age; String color; public void eat(){ System.out.println("吃东西呢"); } public void run(){ System.out.println("撒欢"); } }
而如果我们定义一个它们的父类:动物类,并定义属性及方法
然后我们通过继承的方式,小猫、小狗就可以继承动物类的属性和行为,这部分相同的代码只需写一次,提高了复用性,后期维护成本也会相对降低;
三、继承的格式
关键字:extends
格式:
1、首先定义一个父类:如动物类Animal
2、定义子类:public class 子类名称 extends Animal{}
如:
public class Cat extends Animal{ //继承父类中的属性及方法 //同时也可以有自身的特性 public void catchMouse(){ System.out.println("猫捉老鼠"); } }
四、方法的重写Override
重写与重载的区别:
重写(Override):在继承关系当中,方法的名称一样,参数列表一样;也称为覆盖、覆写
重载(Overload):方法的名称一样,参数列表不一样
方法覆盖重写的注意事项:
1、必须保证父子类中的方法名称一样,参数列表也一样
@Override 写在方法前面,用来检测是不是有效的正确覆盖重写
2、子类方法的返回值必须 【小于等于】 父类方法的返回值范围
ps:Object类是所有类的公共最高父类(祖宗类)
3、子类方法的权限必须 【大于等于】 父类方法的权限修饰符
ps:public > protected > 未写权限修饰符 > private
五、super 与 this 关键字
super关键字:访问父类内容。我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:访问本类内容。
/* super关键字用法: 1、子类的成员方法中,访问父类成员变量 2、子类的成员方法中,访问父类的成员方法 3、子类的构造方法中,访问父类的构造方法 */ public class Zi extends Fu{ int num = 20; public Zi(){ //如果不写,编译器会默认赠送一个 super();//必须是第一个语句,否则会报错 System.out.println("子类构造方法"); } public void methodZi(){ System.out.println(num);//子类中的num System.out.println(super.num);//父类中的num } public void method(){ super.method();//访问父类中的method方法 System.out.println("子类方法"); } }
/* this关键字用法: 1、在本类的成员方法中,访问本类的成员变量 2、在本类的成员方法中,访问本类的另一个成员方法 3、在本类的构造方法中,访问本类的另一个构造方法 */ public class Zi extends Fu{ int num = 20; public Zi(){ // super和this两种构造调用,不能同时使用 // super(); //this调用也必须是构造方法的第一个语句 this(2); } public Zi(int num) { this.num = num; } public void showNum(){ int num = 100; System.out.println(num);//局部变量 System.out.println(this.num);//本来中的成员变量 System.out.println(super.num);//父类中的成员变量 } public void methodA(){ System.out.println("AAA"); } public void methodB(){ //在本类的成员方法中,访问本来的另一个成员方法 this.methodA(); System.out.println("BBB"); } }
以上是关于Java基础面向对象三个特征:继承的主要内容,如果未能解决你的问题,请参考以下文章