关于父类私有属性在子类构造函数中super调用的解释

package test;

public class Car {
        private int carMoney;    //汽车租金
        private String carName;   //汽车名字
        private int  carNumb;      //汽车序列号
        private int carryNum;    //载货量
        private int passengerNum;//载客人数

        public Car(int carNumb,String carName,int  carMoney,int passengerNum,int carryNum){
            this.carMoney = carMoney;
            this.carName = carName;
            this.carNumb = carNumb;
            this.carryNum = carryNum;
            this.passengerNum = passengerNum;
        }
        public int getCarMoney() {
            return carMoney;
        }
        public void setCarMoney(int carMoney) {
            this.carMoney = carMoney;
        }
        public String getCarName() {
            return carName;
        }
        public void setCarName(String carName) {
            this.carName = carName;
        }
        public int getCarNumb() {
            return carNumb;
        }
        public void setCarNumb(int carNumb) {
            this.carNumb = carNumb;
        }
        public int getCarryNum() {
            return carryNum;
        }
        public void setCarryNum(int carryNum) {
            this.carryNum = carryNum;
        }
        public int getPassengerNum() {
            return passengerNum;
        }
        public void setPassengerNum(int passengerNum) {
            this.passengerNum = passengerNum;
        }

        public void showInfo() {
        // TODO Auto-generated method stub
        }

        public static void main(String[] args){
            Car as=new Car(0,"sende",200000,23,32);
            System.out.println(as.carMoney);
            /**
             *
             * 子类可以继承父类的变量
             * ①子类和父类在同一个包中时,子类可以继承父类的除private属性的所有方法和成员变量,当子类与父类不在同一个包中时,子类只能继承父类的protected和public属性的成员变量和方法。
             * ②子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同,子类就隐藏从父类继承来的方法(方法的重写)。
             * ③在子类中允许有一个方法和父类的方法名字相同而类型不同。
             *
             * 在这个测试类中可以看到,可以直接使用类对象获取父类中的属性,即使该属性是私有属性,而使用其子类的对象获取对应属性,却无法使用对象名.属性,
             * 只能通过公有的get方法获取属性,可以看出在子类的构造方法中的该 变量不是子类的,而是父类的,super关键字的作用是调用父类的构造方法,且必须
             * 放在构造器的首行
             * this和super分为调用和引用。只可以引用父类构造器,不可以调用。引用只可以出现在构造器的第一行。
             * super引用的是父类的构造方法而不是父类的属性,如果将父类的构造方法变为私有你就可以发现子类的使用super的构造出错了。因为super调用的使父类
             * 的构造方法,所以在走父类构造器中的this代表的是父类,赋值给的属性也是父类的,这里子类中继承的感觉是父类属性的一个映射,因为它受到父类中的修饰
             * 词的影响,不完全属于子类
             * 不知道正确不正确,我的看法,欢迎指出问题,谢谢
             */
            Sedan sd=new Sedan(0,"sende",200000,23,32);
            System.out.println(sd.getCarNumb());

        }
        }

    class Sedan extends Car{
        public Sedan(int carNumb,String carName,int  carMoney,int passengerNum,int carryNum){
            super(carNumb,carName,carMoney,passengerNum,carryNum);
        }
    }

    class Pickup extends Car{
        public Pickup(int carNumb,String carName,int  carMoney,int passengerNum,int carryNum){
            super(carNumb,carName,carMoney,passengerNum,carryNum);
        }
    }
时间: 2024-11-05 22:32:56

关于父类私有属性在子类构造函数中super调用的解释的相关文章

Effective JavaScript Item 38 在子类构造函数中调用父类构造函数

本系列作为Effective JavaScript的读书笔记. 在一个游戏或者图形模拟的应用中,都会有场景(Scene)这一概念.在一个场景中会包含一个对象集合,这些对象被称为角色(Actor).而每个角色根据其类型会有一个图像用来表示,同时场景也需要保存一个底层图形展示对象的引用,被称为上下文(Context): function Scene(context, width, height, images) { this.context = context; this.width = width

子类构造函数会默认调用父类无参构造函数

1.调用父类无参构造函数是默认的! 子类的构造方法默认都去访问了父类的无参构造方法:在子类中的构造方法后都有一行默认语句 base() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Fu {   public Fu()     {         Console.WriteLine("fu");     } } class Zi : Fu {     public Zi()         : base()//不管是否显式调用,控制台都会输出fu

JavaSE8基础 子类构造函数中写super语句去显式指定父类的构造函数

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: /* *默认是 子类的构造函数先去调用父类的无参构造函数,但是问题就来,如果父类没有无参构造函数怎么办? *通过super去显式指定父类的构造函数 */ //父类 class Father { //有参构造函数,int public Father(int num) { System.out.println("

js 关于在子类构造函数中加入call(this)的用意!

先上例子: function Animal(a,b) { this.a = a; this.b = b; } function Dog(c) { //Animal.call(this);//注释<1> } Dog.prototype = new Animal(); Dog.prototype.constructor = Dog; var dog1 = new Dog('tom'); console.log(dog1); var animal = new Animal(); console.lo

属性只能在构造函数中定义,在其他函数中不能定义,只能引用,

1 class aa(): 2 3 def __init__(self): 4 self.cc = 6 5 def do(self): 6 self.bb=5#无效,只相当于局部变量 7 def do1(self): 8 print (self.bb) 9 aaa=aa() 10 print (dir(aa))#无cc属性 11 print (dir(aaa))#有cc属性 12 #print (aaa.bb)#报错, 13 #aaa.do1()#报错

java学习之静态块、显示初始化块、构造函数、this在构造函数中的调用,区别联系与调用顺序

1.静态代码块---给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载) /** * 静态代码块 * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化 */ static{ System.out.println("a"); } 2.(显示初始化块)构造代码块---给对象初始化, /** * 构造代码块 * 作用:给对象进行初始化 * 对象一建立就运行,而且优先于构造函数执行 * * 和构造函数的区别 * 构造代码块是给所有对象进行统

python中super()方法的解释

在学习 Python 类的时候,会碰见类中有 __init__() 这样一个函数,其实它就是 Python 的构造方法. 构造方法类似于类似 init() 这种初始化方法,来初始化新创建对象的状态,在一个对象创建后会立即调用,比如像实例化一个类: f = FooBar() f.init()#手动初始化 使用构造方法就能让它简化成如下形式:对象创建后自动调用魔法方法__init__(),对对象进行初始化操作 f = FooBar() 在明白了构造方法之后,来点进阶的问题,那就是父类的构造方法中的初

Java中子类能继承父类的私有属性吗?

前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先看下面一段代码 /** * 定义父类 * @author CBS */ public class Father { private String name;//私有属性 private char sex; public void tell(){ System.out.println(name+sex

Python中私有方法和私有属性

1.私有方法和私有属性私有方法只能在类内部被调用,不能被对象使用私有属性只能在类内部使用,不能被对象使用 私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或修改,然后对象在调用这个公有方法使用.###私有属性和私有方法#########在属性名和方法名前面加上 __ class Person(object): def __init__(self): # 公有属性 self.name = "李四" #私有属性 self.__age = 18