Java-面向对象三大特性之继承

今天学习—继承。

为了便于理解,文章最后还是会放案例讲解,下面一起来学习吧~

一、继承的介绍

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);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值