首页 > 编程语言 > 详细

java面向对象类的继承~

时间:2021-03-28 12:46:05      阅读:21      评论:0      收藏:0      [点我收藏+]

类的继承

语法:

    修饰符 class 子类名 extends 父类名{
    
    }

    自定义类默认隐藏式继承了Object类
    class Cat {
    ...
    }
    等价于如下
    class Cat extends Object{
    .........
    }

    类的继承特性:

        1、没指定继承哪个父类,默认继承Object
        2、在Java中Object类是所有类的父类
        3、子类继承父类时,不能继承父类的构造方法【这一点不如Python】
        4、父类叫做基类,子类叫做派生类
        5、满足条件is a
        6、一个类只能继承一个直接父类
        7、类继承具有传递性。

理解视图举例

技术分享图片

 

 

代码举例:水果~苹果

父类:水果

package com.zmd.study.exten;

public class Fruit {
    /**
     * 水果的重量属性
     */
    private double weight ;

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }
}

 

子类:苹果类

package com.zmd.study.exten;

public class Apple extends Fruit{
    public String color ;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

测试类输出:

public class Test {
    public static void main(String[] args) {
        Apple apple = new Apple();
        apple.setWeight(0.3);
        System.out.println("苹果重量:" + apple.getWeight());
    }  
}

/**
输出:
苹果重量:0.3
*/

 

 



7-1 重写父类方法
    ---子类的方法名、参数列表、修饰符一致
    ---子类的返回类型一致或父类方法返回类型的子类型:
        例如:String 是Object的子类型
            int 是 Double的子类型
    注意事项:
        1、super.方法/变量。直接访问父类的资源
        2、如果不写,默认为访问本类中资源即隐含了this.
        3、如果子类重写父类的方法体中,有调用被重写的方法,则只能使用super
        4、访问父类中的实例变量可以是this. 也可以是super. 但是范围子类独有的实例变量/方法 只能用this
        5、super(); super([参数列表])完成对父类构造方法赋值
        
 7-2 父类中含有构造方法
     在子类中重写
    public 类名([参数列表]){
        完成对成员变量赋值;
        super(参数); //完成对父类构造方法赋值
    }
    示例代码:
    class Persion{
        String name;
        char sex;
        int age;
        //无参构造
        public Persion(){}
        //有参构造
        public Persion(String name, char sex, int age){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }

        public void sayHi(){
            System.out.print("Hi 大家好!我的名字:" +this.name+ "\t性别:" + this.sex + "\t年龄:"+ this.age );
        }
    }

    class Student extends Persion{
        //子类特有属性
        int id;
        String grade;

        //子类的无参构造方法,执行父类无参构造
        public  Student(){
            super();
        }
        public  Student(String name, char sex, int age, int id, String grade){
            //执行父类构造方法
            super(name,sex,age);
            //对子类特有属性赋值
            this.id = id;
            this.grade = grade;
        }

        //重写父类方法
        public void sayHi(){
            super.sayHi();//调用父类的方法
            System.out.println("\t学号:" + this.id + "\t班级:" + this.grade);//合并自己的特有输出
        }
    }

    class StudentTest{
        public static void main(String[] args){
            Student s = new Student();
            s.sayHi();
            Student s2 = new Student("唐东",‘男‘,22,1234,"金山班");
            s2.sayHi();
        }
    }
7-3 实例化子类过程中发生了什么?
    子类名obj =  new 子类();
    执行了父类对应构造
    如果不执行super(name,sex,age),而子类构造方法中直接执行对父类的成员变量赋值,例如如下:
    /*this.name = name;    则默认会执行super()父类无参构造一次
    则:需注意,构造方法无参的无用也要写上避免出现错误

7-4 多态特性 (向父类转型)
    语法:
    父类类名 引用名称 = new 子类类名();
    注意,引用名称.只能访问父类的实例属性和实例方法,如果子类重写了父类的方法,则优先访问子类的方法。

    效果:多个对象,调用同一个方法,输出不同的结果
        Vehicle v = new Car();
        System.out.println("小汽车默认租金"+ v.getSumRent(1));
        v = new Bus();
        System.out.println("大汽车默认租金"+ v.getSumRent(1));
    满足条件:
        子类必须继承父类
        子类必须重写父类方法
        满足语法: 子类类名 引用名称 子类类型
    典型示例代码:
        //宠物类,作为父类,都会吃
        class Pet{
            public void eat(){
                System.out.println("宠物正在吃东西....");
            }
        }

        class Dog extends Pet{
            public void eat(){
                System.out.println("正在吃狗粮");
            }
        }

        class Cat extends Pet{
            public void eat(){
                System.out.println("正在吃猫粮");
            }
        }
        //各种宠物吃的不同...省略
        class Master{
            public void feed(Pet pet){
                pet.eat();
            }
        }

        class MasterTest
        {
            public static void main(String[] args){
                Master m = new Master();
                Cat c = new Cat();
                Dog d = new Dog();
                //效果,主人直接用一个喂方法喂不同的宠物。
                m.feed(c);
                m.feed(d);
            }
        }

    向子类强制转型(父类创建对象,引用子类变量/方法):
    
    语法:子类类型 引用名称 = (子类类型) 父类对象
        示例    
        Pet c = new Cat();
        Cat c1 = (Cat)c ;
        c1.catching();

java面向对象类的继承~

原文:https://www.cnblogs.com/zhangmingda/p/14588087.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!