上海:15201841284
广州:020-2989 6995
深圳:0755-23061965
武汉:027-8798 9193
西安:029-8822 8155
java中的super
关键字是一个引用变量,用于引用直接父类对象。
每当创建子类的实例时,父类的实例被隐式创建,由super
关键字引用变量引用。
java super
关键字的用法如下:
super
可以用来引用直接父类的实例变量。super
可以用来调用直接父类方法。super()
可以用于调用直接父类构造函数。可以使用super
关键字来访问父类的数据成员或字段。 如果父类和子类具有相同的字段,则使用super
来指定为父类数据成员或字段。
class Animal { String color = "white"; } class Dog extends Animal { String color = "black"; void printColor() { System.out.println(color);// prints color of Dog class System.out.println(super.color);// prints color of Animal class } } class TestSuper1 { public static void main(String args[]) { Dog d = new Dog(); d.printColor(); } }
执行上面代码,输出结果如下 -
black white
在上面的例子中,Animal
和Dog
都有一个共同的属性:color
。 如果我们打印color
属性,它将默认打印当前类的颜色。 要访问父属性,需要使用super
关键字指定。
super
关键字也可以用于调用父类方法。 如果子类包含与父类相同的方法,则应使用super
关键字指定父类的方法。 换句话说,如果方法被覆盖就可以使用 super
关键字来指定父类方法。
class Animal { void eat() { System.out.println("eating..."); } } class Dog extends Animal { void eat() { System.out.println("eating bread..."); } void bark() { System.out.println("barking..."); } void work() { super.eat(); bark(); } } class TestSuper2 { public static void main(String args[]) { Dog d = new Dog(); d.work(); } }
执行上面代码,输出结果如下 -
black white
在上面的例子中,Animal
和Dog
两个类都有eat()
方法,如果要调用Dog
类中的eat()
方法,它将默认调用Dog
类的eat()
方法,因为当前类的优先级比父类的高。
所以要调用父类方法,需要使用super
关键字指定。
super
关键字也可以用于调用父类构造函数。下面来看一个简单的例子:
class Animal { Animal() { System.out.println("animal is created"); } } class Dog extends Animal { Dog() { super(); System.out.println("dog is created"); } } class TestSuper3 { public static void main(String args[]) { Dog d = new Dog(); } }
注意:如果没有使用
super()
或this()
,则super()
在每个类构造函数中由编译器自动添加。
我们知道,如果没有构造函数,编译器会自动提供默认构造函数。 但是,它还添加了super()
作为第一个语句。
下面是super
关键字的另一个例子,这里super()
由编译器隐式提供。
class Animal { Animal() { System.out.println("animal is created"); } } class Dog extends Animal { Dog() { System.out.println("dog is created"); } } class TestSuper4 { public static void main(String args[]) { Dog d = new Dog(); } }
执行上面代码,输出结果如下 -
animal is created dog is created
下面来看看super
关键字的实际用法。 在这里,Emp
类继承了Person
类,所以Person
的所有属性都将默认继承到Emp
。 要初始化所有的属性,可使用子类的父类构造函数。 这样,我们重用了父类的构造函数。
class Person { int id; String name; Person(int id, String name) { this.id = id; this.name = name; } } class Emp extends Person { float salary; Emp(int id, String name, float salary) { super(id, name);// reusing parent constructor this.salary = salary; } void display() { System.out.println(id + " " + name + " " + salary); } } class TestSuper5 { public static void main(String[] args) { Emp e1 = new Emp(1, "ankit", 45000f); e1.display(); } }
执行上面代码,输出结果如下 -
1 ankit 45000
更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。
北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE+微服务+大数据 大数据+机器学习+平台架构 Python+数据分析+机器学习 人工智能+模式识别+强化学习 WEB前端+移动端+服务端渲染
地址:陕西省西安市高新区西安软件园西区创新信息大厦A座三层尚学堂
电话:029-88228155 / 18291433445
山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702
武汉学区地址:武汉市东湖高新区光谷金融港B22栋11楼
咨询电话:027-87989193
网址:http://www.cssxt.com/
咨询电话:0731-83072091
深圳校区地址:深圳市宝安区航城大道U8智造产业园U6栋3楼
咨询电话:0755-23061965 / 18898413781
上海尚学堂校区地址:上海市浦东新区城丰路650号
咨询电话:021-67690939
广州校区地址:广州市天河区车陂街道大岗路5号中侨广场2栋321室(四号线车陂站D出口,或brt车陂站)
咨询电话:18948349646
保定招生办公室
地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室
电话:15132423123