zoukankan      html  css  js  c++  java
  • java面向对象编程(六)--四大特征之继承

    本文将介绍继承、方法重载和方法覆盖。其中方法重载和方法覆盖是在讲多态时必须要清楚的一个知识点。

    一、继承

    1.继承的概念

    继承可以解决代码复用,让我们的编程更加靠近人类思维。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends语句来声明继承父类。语法如下:

                                          class 子类 extends 父类

    这样,子类就会自动拥有父类定义的某些属性和方法。另外,并不是父类的所有属性、方法都可以被子类继承。父类的public修饰符的属性和方法,protected修饰符的属性和方法,默认修饰符属性和方法能够被子类继承,private修饰符的属性和方法不能被子类继承。

    2.案例:

    //功能:说明继承的重要性
    package com.davperson;//包名
    public class Demo117 {
        public static void main(String[] args) {
            Pupil p1=new Pupil();
            p1.printName();
        }
    }
    
    //将学生的共有属性提取,做一个父类
    class Stu{
        //定义成员属性
        protected int age;
        public String name;
        public float fee;
        private String job;//私有将不被继承
        
        //编程中,如果你不希望子类继承某个属性或方法
        //则将其声明为private即可
        public void printName(){
            System.out.println("名字"+this.name);
        }
    }
    
    //小学生类
    class Pupil extends Stu{
        //交学费
        public void pay(float fee){
            this.fee=fee;
        }
    }
    //幼儿
    class Pre extends Pupil{
        //交学费
        public void pay(float fee){
            this.fee=fee*1.5f;
        }
    }
    //中学生类
    class MiddleStu extends Stu{
        //交学费
        public void pay(float fee){
            this.fee=fee*0.8f;
        }
    }
    //大学生类
    class ColStu extends Stu{
        //交学费
        public void pay(float fee){
            this.fee=fee*0.1f;
        }
    }

    3.继承--注意事项

      1、子类最多只能继承一个父类(指直接继承)

      2、java所有类都是Object类的子类 (所有的子类都可以逐级继承,例:爷->父->子->孙)

      3、JDK6中有202个包3777个类、接口、异常、枚举、注释和错误

      4、在做开发的时候,强烈建议大家多查jdk帮助文档

      5、在使用类时,实在不知道怎么办,多使用搜索引擎

    至此,关于类的定义又可以跟进一步得到完善:

    package 包名;
    class 类名 extends 父类{        
        成员变量;              
        构造方法;
        成员方法;
    }

    二、方法重载和方法覆盖

    在讲解多态前,必须讲解方法重载(overload)和方法覆盖(override)。

    1.方法重载(overload)

    简单的说:方法重载就是在类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。

    案例:

    /*
      方法重载(overload)getMax
      写一个类(Abc),编写方法可以接收两个整数,返回两个数中较大的数[Demo119.java]
    */
    public class Demo119{
        public static void main(String []args){
            Abc2 abc1=new Abc2();
            System.out.println(abc1.getMax(12,14));
            System.out.println(abc1.getMax(24f,20f));
        }
    }
    
    class Abc{
        //返回较大的整数
        public int getMax(int i,int j){
            if(i>j){
                return i;
            }else{
                return j;
             }
        }
    
                    //返回较大的float类型数
        public float getMax(float a,float b){
            if(a>b){
                return a;
            }else{
                return b;
             }
        }

    关于方法重载的更多说明:

    1、方法名相同

    2、方法的参数类型,个数,顺序至少有一项不同

    3、方法返回类型可以不同(只是返回类型不一样,不能构成重载)

    4、方法的修饰符可以不同(只是控制访问修饰符不同,不能构成重载)

    2.方法覆盖(override)

    方法覆盖就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法。如下例Cat类中的cry方法就覆盖了Animal类的cry方法。

    //子类方法覆盖父类方法[Demo120.java]
    public class Demo120{
        public static void main(String []args){
            //创建一只猫
            Cat cat1=new Cat();
                cat1.cry();
            Dog dog1=new Dog();
                dog1.cry();
        }
    }
    //动物类
    class Animal{
        int age;
        String name;
        //都会叫
        public void cry(){
            System.out.println("我是动物,不知道怎么叫");
        }
    
    }
    //猫猫类
    class Cat extends Animal{
        //覆盖父类方法
        public void cry(){
            System.out.println("猫猫叫!");
        }
    }
    //狗狗类
    class Dog extends Animal{
        //覆盖父类方法
        public void cry(){
            System.out.println("汪汪叫!");
        }
    }

    关于方法覆盖的更多说明:

    方法覆盖有两点一定要注意:

    1、子类的方法的返回类型,参数,方法名称,要和父类的返回类型,参数,方法名称完全一样,否则编译出错。

    2、子类方法不能缩小父类方法的访问权限。

  • 相关阅读:
    十三 .Django(ORM表高级操作)
    十二 .Django ForeighKey自关联(ORM)
    十二 .Django 一对多表ForeighKey(ORM)
    十一 .Django 一对一表OneToOneField (ORM)
    十 .Django 单表操作(ORM)
    八 .Django 模型(models)
    【模板】Lucas定理
    【模板】AC自动机加强版
    【模板】AC自动机
    【POJ3162】Walking Race 树形dp+单调队列+双指针
  • 原文地址:https://www.cnblogs.com/Davis812/p/3908576.html
Copyright © 2011-2022 走看看