今天学习—继承。
为了便于理解,文章最后还是会放案例讲解,下面一起来学习吧~
文章目录
一、继承的介绍
1、什么是继承
继承就是指一个子类继承了父类的所有成员,并且能够访问并使用父类中非私有
的属性和方法。
假设:儿子继承父亲给予的房子和车子,这就是继承
2、继承的作用
使用继承能够减少代码的冗余。
假设:在多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独的一个类中,那么,其他类无须在定义这些属性和行为,只要继承这个类即可
3、继承的语法
继承通过关键字 extends
来实现
具体语法:
public class Father{}
public class Son extends Father{} //子类继承父类
二、子类如何使用父类的属性和方法
值得一提的是,子类能够直接使用父类的属性和方法
,无须再通过其他的形式即可完成调用
例如:
Father类中有方法 eat();
Son类中可以直接调用Father类的eat();
三、父类能否使用子类的属性和方法
对于这一点,切记:子类能够调用父类的属性和方法,但是父类不能够调用子类的属性和方法
,这一点容易混淆,在后续编程的过程中需要额外的注意。
四、子类和父类中有同名的方法或者变量怎么办
在第三点中讲过,子类能够直接用父类的方法,但是为了区别父类和子类,不管父类和子类有没有重名,建议每次在子类调用父类方法的时候都加入super
关键字
例如:Father类中方法为 eat(); Son类使用super.eat()
调用父类的方法(如果不懂,可以看看第七点的例题)
五、使用继承后方法的运行顺序
顺序:父类构造方法----->子类构造方法----->子类普通方法----->父类普通方法
代码举例:
public class Father{
public Father(){
}
public void FatherShow(){
}
}
public class Son extends Father{
public Son(){
}
public void SonShow(){
// 调用父类
FatherShow();
}
}
public class test{
public static void main(String[] args){
Son son = new Son();
son.SonShow();
}
}
根据test类分析得出
顺序:父类构造方法(Father)----> 子类构造方法(Son)-----> 子类普通函数(SonShow)---->父类普通函数(FatherShow)
总结:
构造方法:父类比子类先执行
普通方法:谁先调用谁先执行
六、对比:方法重写与方法重载
方法重写:
简介
:子类继承了父类的方法或者属性,子类再对其方法或者属性重新编写
详细介绍
:当父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。重写后的方法会覆盖父类的功能,因此称为方法重写,方法的覆盖。
简单比喻
:Son从Father中拿到一张Father写了一些字的纸,Son可以对该纸进行修改,可以擦掉重写也可以在后面接着写。
方法重载:
条件
:在同一个类中,方法名相同,参数列表不同,跟返回值没有关系
简单比喻
:
public void area(){
System.out.println("计算面积");
}
public void area(int r){
// 圆的面积
double cicle = r*r*3.14;
}
public void area(int length,int width){
// 长方形的面积
int size = length*width;
}
七、代码案例
1、题目
定义数组存储3部手机对象手机的属性:品牌,价格,颜色。要求:计算出三部手机的平均价格
2、部分知识讲解
封装的类:test5_phone
测试的类: test5
①、这里需要将三个相同类型test5_phone
的对象放入一个数组中,数组的类型跟对象类型一致
②、通过for
循环创建对应的对象,然后给对象中的属性赋值。
③、通过给调用构造函数将参数赋值给类test5_phone
的成员变量
④、将手机的价格相加然后除以数组的长度得到平均值avg
代码演示:
// test5_phone 类
public class test5_phone {
// todo 定义数组存储3部手机对象手机的属性:品牌,价格,颜色。要求:计算出三部手机的平均价格
String brand;
int price;
String color;
public test5_phone(String brand, int price, String color) {
this.brand = brand;
this.price = price;
this.color = color;
}
public test5_phone() {
}
}
// test5 测试类
import java.util.Scanner;
public class test5 {
public static void main(String[] args) {
test5_phone arr[] = new test5_phone[3];
Scanner input = new Scanner(System.in);
int sum =0;
int avg = 0;
for (int i = 0; i < arr.length; i++) {
String brand;
int price;
String color;
System.out.println("请输入第"+(i+1)+"手机的品牌");
brand = input.next();
System.out.println("请输入第"+(i+1)+"手机的价格");
price = input.nextInt();
System.out.println("请输入第"+(i+1)+"手机的颜色");
color = input.next();
arr[i] = new test5_phone(brand,price,color);
sum += arr[i].price;
}
avg = sum / arr.length;
System.out.println("三部手机的平均价格是"+avg);
}
}