java笔记(super关键字的使用)
super 关键字调用父类的构造方法与方法的用法和注意事项
super 关键字调用父类的构造方法与方法的用法和注
意事项
在Java中,使用关键字`super`可以调用父类的构造方法和方法。
下面是关于使用`super`关键字的一些用法和注意事项:
1. 调用父类的构造方法:
- 当子类创建对象时,会自动调用父类的默认构造方法(如果父类有无参构造方法)。
- 如果父类没有无参构造方法,或者希望调用父类的其他构造方法,可以使用`super`关键字来显式调用父类的构造方法。
- 使用`super(参数列表)`来调用父类的构造方法,其中参数列表需要与父类构造方法的参数列表相匹配。
2. 调用父类的方法:
- 在子类中,可以使用`super`关键字来调用父类的被覆盖(重写)的方法。
- 使用`super.方法名(参数列表)`的方式来调用父类的方法。
注意事项:
- `super`关键字只能在子类中使用,用于引用父类的成员。
- `super`关键字必须放在子类的构造方法或方法的第
一行。
- 如果子类覆盖了父类的方法,在子类中使用`super.方法名()`可以在调用父类的方法之前执行一些额外的逻辑。
- 当存在多级继承时,可以使用`super`关键字依次调用父类的构造方法和方法。
使用`super`关键字可以方便地在子类中访问和调用父类的成员,实现代码的复用和扩展。
java中this和super的用法
java中this和super的用法
一、this的用法
1、当this表示当前对象时:
在类的方法中,this表示当前对象,它总是指向调用该方法的对象,这就是说,在类的方法中,“this”永远指向当前对象。
2、局部变量和属性
当一个局部变量或者成员变量名字相同时,this可以用来区分这两个变量,指明属性,要么this引用实例的属性,要么就是方法的局部变量。
3、用this调用构造函数
有时可以使用this调用同一类中其他构造函数,如:
public class A{
public A(){
}
public A(int a){
this();
}
}
4、强调调用成员变量
当this.x和x表示同一个成员变量时,可以使用this.x来强调x是成员变量,而不是局部变量。
二、super的用法
1、调用父类的构造函数
每个子类构造函数默认都会调用父类的默认的无参数的构造函数,可以使用super来调用父类有参数的构造函数。
2、调用父类的成员函数
子类可以调用自己不具备的父类函数,或者重写父类函数,重写时也可以使用super来调用父类函数。
3、调用父类的成员变量
由于子类不能直接访问父类的成员变量,需要使用super来访问父类的成员变量。
java super()使用实例
Java中的super()方法是用来调用父类的构造方法的关键字。
在面向对象编程中,父类和子类之间的关系非常重要,而super()方法就是在子类中调用父类的构造方法的一种方式。
1. super()方法的作用在Java中,当创建子类的实例时,通常会调用父类的构造方法来初始化父类中的成员变量和方法。
而使用super()方法可以在子类的构造方法中显式地调用父类的构造方法,以便完成对父类成员变量的初始化工作。
2. super()方法的语法在子类的构造方法中使用super()方法的语法非常简单,只需要在子类构造方法的第一行代码中使用super()即可。
例如:```javapublic class SubClass extends SuperClass {public SubClass() {super();// other initialization code}}```在这个例子中,SubClass是子类,SuperClass是父类,super()方法用来调用SuperClass的构造方法。
3. super()方法的参数在使用super()方法时,还可以传递参数给父类的构造方法,以便完成更为复杂的初始化工作。
例如:```javapublic class SubClass extends SuperClass {public SubClass(int param) {super(param);// other initialization code}}```在这个例子中,SubClass的构造方法接受一个参数param,然后通过super(param)调用父类的构造方法,将参数传递给父类的构造方法。
4. super()方法与this()方法的区别在Java中,this()方法用来调用同一个类中的其他构造方法,而super()方法用来调用父类的构造方法。
它们的主要区别在于this()方法是针对当前类的构造方法,而super()方法是针对父类的构造方法。
Java中super关键字的用法和细节
Java中super关键字的⽤法和细节⽬录前⾔1.super关键字的⽤法2.super关键字的使⽤细节3.super和this关键字的⽐较总结前⾔ 因为西安疫情的原因在宿舍摆了⼀个⽉,最近在复习前⾯学过的知识的时候发现,⾃⼰在初学⾯向对象时对Super关键字的理解不够深刻,所以现在重新学习⼀下super关键字的⽤法和细节。
1. super关键字的⽤法 在Java中,super关键字共有三种⽤法,分别是:通过 super.属性名来访问⽗类中的成员变量通过super.⽅法名(参数列表) 来访问⽗类中的成员⽅法通过super(参数列表) 来访问⽗类的构造⽅法调⽤⽗类的成员变量:class Person {protected int age;}class Student extends Person{public void func(){int age = super.age; //通过super.属性名访问⽗类的成员变量}}调⽤⽗类中的成员⽅法:class Person {protected void func(){}}class Student extends Person{public void func(){super.func(); //通过super.⽅法名调⽤⽗类的成员⽅法}}调⽤⽗类的构造器:class Person {String name;public Person(String name) { = name;}}class Student extends Person{public Student(String name) {super(name); //通过super(参数列表)调⽤⽗类的构造⽅法}}注意:⼦类⽆法通过super关键字访问⽗类中private修饰的属性和⽅法,因为private修饰的属性和⽅法只能在当前类的内部进⾏访问在⼦类的构造器中通过super关键字调⽤⽗类的构造器时,super关键字必须出现在构造器的第⼀⾏且仅能出现⼀次2. super关键字的使⽤细节当我们查找⼦类中的⽅法时,调⽤规则如下:当⼦类中存在需要调⽤的⽅法时,直接调⽤即可如果⼦类中不存在该⽅法,则向上寻找⽗类,如果⽗类中存在该⽅法,则调⽤⽗类中的⽅法若⽗类中不存在该⽅法,那么向上寻找⽗类的⽗类,直到找到Object类提⽰:如果直到Object类依然没有找到该⽅法,那么会提⽰⽅法不存在,但如果向上找到了这个⽅法但没有权限访问(例如该⽅法被private修饰),则会产⽣错误。
java中super()的用法
一、super()的概念在Java编程中,super()是一个关键字,用来调用父类的构造方法。
在子类中使用super()可以调用父类的构造方法,从而实现子类继承父类的属性和方法。
super()必须作为子类构造方法的第一条语句,如果不显式调用super(),则默认调用父类的无参构造方法。
二、super()的用法1. 调用父类的构造方法当子类实例化时,会先调用父类的构造方法,可以使用super()在子类构造方法中调用父类的构造方法。
例如:```javapublic class Parent {public Parent(){System.out.println("Parent类的构造方法");}}public class Child extends Parent {public Child(){super(); //调用父类的构造方法System.out.println("Child类的构造方法");}}在上述例子中,当实例化Child类时,会先调用Parent类的构造方法,然后再调用Child类的构造方法。
2. 访问父类的属性和方法在子类中使用super关键字可以访问父类的属性和方法。
例如:```javapublic class Parent {public String name = "parent";public void sayHello(){System.out.println("Hello, I'm "+ name);}}public class Child extends Parent {public String name = "child";public void sayHello(){super.sayHello(); //调用父类的sayHello方法System.out.println("My name is "+ name);}}在上述例子中,子类可以通过super关键字访问父类的属性和方法,实现对父类的继承和扩展。
java super 关键字调用父类的构造方法与方法的用法和注意事项
java super 关键字调用父类的构造方法与方法的用法和注意事项一、背景介绍在Java中,super关键字是一个非常重要的关键字,它用于调用父类的构造方法和方法。
在面向对象的程序设计中,经常会遇到需要在子类中重写父类的方法或者调用父类的构造方法的情况。
而super关键字就是用来处理这些情况的。
二、什么是super关键字super关键字是Java中的一个关键字,它用来调用父类的构造方法和方法。
在子类中通过super关键字可以访问父类中的成员变量和方法,以及调用父类的构造方法。
三、调用父类的构造方法在Java中,当子类实例化的时候,其构造方法会自动调用父类的无参构造方法。
但如果父类没有无参构造方法,那么子类就需要通过super关键字来调用父类的有参构造方法。
例如:javapublic class Parent {public Parent(int num) {父类的有参构造方法}public class Child extends Parent {public Child(int num) {super(num); 调用父类的有参构造方法}}需要注意的是,super关键字在子类构造方法中必须是第一条语句,否则编译器会报错。
因为在实例化子类的时候,先要调用父类的构造方法,然后再执行子类的构造方法。
四、调用父类的方法除了调用父类的构造方法,super关键字还可以用来调用父类的方法。
在子类中可以使用super关键字来访问父类中的普通方法或者重写父类的方法。
例如:javapublic class Parent {public void method() {父类的方法}public class Child extends Parent {public void method() {super.method(); 调用父类的方法}}在这个例子中,子类重写了父类的方法,然后在子类方法中通过super关键字调用了父类的方法。
java笔记(super关键字的使用)
super 关键字的使用 super 关键字出现在子类中,主要功能就是完成子类调用父类中的内容,也就是调用父类中的属性或方法。
super 调用父类中的构造方法:class Person{String name;int age;public Person(String name,int age){=name;this.age=age;}}class Student extends Person{String school;public Student(){super("张三",27);}}public class TestPersonStudentDemo{public static void main(String args[]){Student s=new Student();S.shchool=”北京”;System.out.println("我是:"++",今年:"+s.age+"岁,学校:"+s.school) ; }}输出结果为:我是张三,今年27岁,学校:北京本程序在子类的构造方法中明确地指明了调用的是父类中有两个参数的构造方法,所以程序在编译时不再去找父类中无参的构造方法。
用super 调用父类中的构造方法,只能放在子类的第一行。
通过super 调用父类的属性和方法:class Person 父类构造方法子类构造方法 调用父类构造方法{String name;int age;public Person(){}public String talk(){return "我是:"++",今年:"+this.age+"岁";}}class Student extends Person{String school;public Student(String name,int age,String school){//在这里用super 调用父类中的属性=name;super.age=age;//调用父类中的talk()方法System.out.print(super.talk());//调用本类中属性this.school=school;}}public class TestPersonStudentDemo3{public static void main(String args[]){Student s=new Student("张三",27,"北京");System.out.println(",学校:"+s.school);}}输出结果为:我是:张三,今年:27岁,学校:北京限制子类的访问有些时候,父类并不希望子类可以访问自己的类中全部的属性或方法,所以需要将一些属性父类构造方法子类构造方法 父类一般方法与方法隐藏起来,不让子类去使用。
java的继承super用法
java的继承super用法在Java中,继承是面向对象编程的一个重要概念。
它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。
在继承关系中,子类继承了父类的特性,并且可以添加自己的特性或覆盖父类的方法。
当子类继承父类时,super关键字经常被用来引用父类的属性和方法。
super关键字有多种用法,下面将详细介绍每一种用法。
1. super( 构造器在子类的构造器中,使用super(来调用父类的构造器。
这是因为子类继承了父类的属性,需要通过调用父类的构造函数来初始化这些属性。
super(的调用必须放在子类构造器的第一行。
如果没有显式地调用super(,那么Java会自动隐式调用父类的默认构造函数。
2. super 关键字引用父类属性在子类中,可以使用super关键字来引用父类的属性。
这常常用于解决子类和父类有同名字段的冲突问题。
通过super关键字,可以明确地指定引用的是父类的属性。
```public class AnimalString name;public Animal(String name) = name;public class Dog extends Animalint age;public Dog(String name, int age)super(name); //调用父类的构造器来初始化name属性this.age = age;}public void displaSystem.out.println( + " is " + age + " years old."); //引用父类的name属性}public static void main(String[] args)Dog dog = new Dog("Fido", 5);dog.display(; //输出 Fido is 5 years old.}```3. super 关键字引用父类方法子类可以通过super关键字来引用父类的方法。
java super用法
java super用法Java一种面向对象的程序设计语言,其中有一个重要的概念叫做“继承”。
继承是指允许程序员创建新类(子类),它们从已经存在的类(父类)派生而来,并自动继承父类的属性和行为。
编写继承程序时,使用 super键字可以在子类中调用父类的构造函数、属性和方法。
super键字的定义:super一个指向父类的特殊变量,它可以用来访问父类的属性和方法。
super键字有两个重要的用途:1.调用父类的构造函数;2.调用父类的属性和方法。
将来介绍 super这两个用法。
首先,我们看一个例子,让大家了解 super键字是如何工作的: class Parent {int propertyA;void methodA(){System.out.println(Parent class methodA()}}class Child extends Parent {int propertyB;void methodB(){System.out.println(Child class methodB()System.out.println(Parent class propertyA: +propertyA); methodA();}}上面的程序中,我们有一个 Parent,它有一个属性 propertyA 一个方法 methodA()。
Child继承自 Parent,它有一个属性propertyB一个方法 methodB()。
在 Child的 methodB()法中,我们使用 super键字来访问 Parent的属性 propertyA方法 methodA()。
调用父类构造函数:在子类中,可以使用 super用父类的构造函数,super键字必须位于子类构造函数的第一行,如果没有明确指定,编译器会默认调用父类的无参构造函数,如果没有无参构造函数,编译器将报错。
下面是一个示例:class Parent {int propertyA;Parent(int a) {propertyA = a;}}class Child extends Parent {int propertyB;Child(int a, int b) {super(a);propertyB = b;}}在上面的程序中,Child有两个构造函数,第一个构造函数接受两个参数,它首先调用父类的构造函数,传入一个参数,然后赋值给propertyB。
Java中super关键字是什么?用来干什么?
Java中super关键字是什么?⽤来⼲什么?super 关键字含义super : 超级的含义:在Java中代表当前对象的直接⽗类对象的引⽤⽤法分类super.super(实际参数)1、super(实际参数)super():代表调⽤⽗类⽆参的构造super(参数):调⽤⽗类有参的构造作⽤:在⼦类构造⽅法中调⽤⽗类的构造⽅法特点:1.如果⼦类构造⽅法中的第⼀⾏没有this()或者this(参数),也不是super(参数)默认是super(),构造⽅法的第⼀⾏不是this(...)就是super(...)2.super()和super(参数)只能在构造⽅法的第⼀⾏注意: super()和super(参数)只能⽤在⼦类的构造⽅法中案例:package com.ujiuye.day09;public class Demo10 {public static void main(String[] args) {//Sub sub = new Sub();Sub sub = new Sub(10,20);// 在定义⼀个类的时候如果已经定义了有参构造在开发中⼀般要将⽆参数的构造⽅法补出来 }}// 定义⼀个⽗类class Super{int a;int b;//将构造public Super(){System.out.println("我是⽗类⽆参数的构造⽅法");}public Super(int a, int b) {System.out.println("我是⽗类有参数的构造⽅法");this.a = a;this.b = b;}//定义⼀个⼦类class Sub extends Super{int c;int d;//构造⽅法public Sub(){super(11,22);System.out.println("我是⼦类的⽆参数的构造⽅法");}public Sub(int c, int d) {super(11,22);System.out.println("我是⼦类的有参数的构造⽅法");this.c = c;this.d = d;}}案例2:package com.ujiuye.day09;public class Demo10 {public static void main(String[] args) {//Sub sub = new Sub();Sub sub = new Sub(10,20);// 在定义⼀个类的时候如果已经定义了有参构造在开发中⼀般要将⽆参数的构造⽅法补出来 }}// 定义⼀个⽗类class Super{int a;int b;//将构造public Super(){System.out.println("我是⽗类⽆参数的构造⽅法");}public Super(int a, int b) {System.out.println("我是⽗类有参数的构造⽅法");this.a = a;this.b = b;//定义⼀个⼦类class Sub extends Super{int c;int d;//构造⽅法public Sub(){super();System.out.println("我是⼦类的⽆参数的构造⽅法");}public Sub(int c, int d) {this();System.out.println("我是⼦类的有参数的构造⽅法");this.c = c;this.d = d;}}案例3:package com.ujiuye.day09;public class Demo10 {public static void main(String[] args) {//Sub sub = new Sub();Sub sub = new Sub(10,20);// 在定义⼀个类的时候如果已经定义了有参构造在开发中⼀般要将⽆参数的构造⽅法补出来 }}class YeYe{public YeYe(){System.out.println("我是yeye的构造⽅法");}}// 定义⼀个⽗类class Super extends YeYe{int a;int b;//将构造public Super(){super();System.out.println("我是⽗类⽆参数的构造⽅法");}public Super(int a, int b) {}//定义⼀个⼦类class Sub extends Super{int c;int d;//构造⽅法public Sub(){super();System.out.println("我是⼦类的⽆参数的构造⽅法"); }public Sub(int c, int d) {this();System.out.println("我是⼦类的有参数的构造⽅法"); this.c = c;this.d = d;}}2、super .作⽤:区分直接⽗类中和⼦类中重名的成员(成员变量和成员⽅法)案例:package com.ujiuye.day09;public class Demo10 {public static void main(String[] args) {Sub sub = new Sub();sub.m();}}class YeYe{int b = 1;}// 定义⼀个⽗类class Super extends YeYe{int b = 10;public int m1(){return super.b;}}int b = 20;public void m(){int b = 30;//System.out.println(b);//System.out.println(this.b);System.out.println(super.b);//super 指代当前⼦类的直接⽗类对象的引⽤ System.out.println(super.b);int i = m1();System.out.println(i);}}案例2:package com.ujiuye.day09;public class Demo10 {public static void main(String[] args) {Sub sub = new Sub();sub.m2();}}// 定义⼀个⽗类class Super{public void m1(){System.out.println("我是⽗类中的m1⽅法");}}//定义⼀个⼦类class Sub extends Super{// sub中有3个 b 成员变量@Overridepublic void m1(){System.out.println("我是⼦类重写⽗类的m1⽅法");}public void m2(){//this.m1();//this.m1()super.m1();}}总结super: 当前类的直接⽗类对象的引⽤1. 只能⽤在构造⽅法中2. 只能是构造⽅法的第⼀条有效语句3. 如果⼀个构造⽅法的第⼀⾏不是 this() / this(实参) / super(实参),默认是super()2、super. : 当⼦类中存在和⽗类同名的成员变量,需要使⽤super 指定⽗类的重名的成员变量.。
java中super关键字的用法
java中super关键字的用法一、什么是super关键字super关键字是java语言的一个关键字。
它可以被用来访问一个对象的父类中的字段、构造器和方法。
它在子类中和this关键字很类似,但是this只能用于访问它所在的类中的成员,而super可以访问父类中的成员。
二、super关键字的用法1、super用于调用父类的构造器:当子类构造器需要调用父类构造器时,可以使用super语句。
例: class SuperClass { SuperClass(){ System.out.println('SuperClass构造器被调用'); } } class SubClass extends SuperClass { SubClass() { super(); // 调用父类的构造器 System.out.println('SubClass构造器被调用'); } } 2、super用于调用父类的方法:当子类的方法需要调用父类的方法时,可以使用super语句。
例: class SuperClass { void print() { System.out.println('调用父类的print方法'); } } class SubClass extends SuperClass { void print() { super.print(); // 调用父类的print方法System.out.println('调用子类的print方法'); } }3、super用于调用父类的字段:当子类中的字段和父类中的字段名称相同时,可以使用super关键字来区分。
例:class SuperClass { int x = 10; } class SubClass extends SuperClass { int x = 100; voidprint(){ System.out.println(super.x); // 调用父类的x } } 总结super关键字是java语言中的一个关键字,用于访问父类的字段、构造器和方法。
java中super的用法
java中super的用法一、super关键字的概述在Java编程语言中,super关键字常用于子类中,用于引用父类的成员变量、方法和构造方法。
通过使用super关键字,子类可以直接访问并调用父类中被隐藏或重写的成员。
二、使用super关键字访问父类的成员变量和方法2.1 访问父类的成员变量子类继承了父类的所有非私有成员变量,在子类中可以直接访问继承而来的这些成员变量。
如果子类中定义了与父类同名的成员变量,则可以通过使用super关键字来区分并访问父类中的成员变量。
例如,下面是一个简单的示例代码:```javaclass Parent {int num = 10;}class Child extends Parent {int num = 20;void display() {System.out.println("Child num: " + num);System.out.println("Parent num: " + super.num);}}public class Main {public static void main(String[] args) {Child child = new Child();child.display();}}```输出结果为:```Child num: 20Parent num: 10```可以看到,Child类中定义了一个与Parent同名的成员变量num,并且在display()方法中通过super.num来访问父类中的num变量。
2.2 调用父类的普通方法与访问父类的成员变量类似,子类可以使用super关键字来调用父类中的普通方法。
在子类中重写了父类的方法后,想要调用父类的方法可以使用super关键字。
例如,下面是一个简单的示例代码:```javaclass Parent {void display() {System.out.println("Parent display() called"); }}class Child extends Parent {@Overridevoid display() {super.display(); // 调用父类的display()方法 System.out.println("Child display() called"); }}public class Main {public static void main(String[] args) {Child child = new Child();child.display();}}```输出结果为:```Parent display() calledChild display() called```可以看到,在Child类中通过super.display()来调用父类中的display()方法。
super在java中的意思
super在java中的意思
在Java中,"super"是一个关键字,用于引用父类的成员变量
或方法。
当子类和父类拥有相同的成员变量或方法时,可以使用"super"关键字来明确指定要访问的是父类的成员。
通过使用"super"关键字,可以避免在子类中创建与父类相同名称的变量或方法,同时也可以确保在子类中能够访问父类的成员。
另外,"super"关键字也可以用于调用父类的构造方法。
在子类
的构造方法中使用"super"关键字可以显式地调用父类的构造方法,
以确保在创建子类对象时能够正确地初始化父类的部分。
总的来说,在Java中,"super"关键字用于与父类相关的操作,包括访问父类的成员变量和方法,以及调用父类的构造方法。
通过
使用"super"关键字,可以实现子类与父类之间的数据和行为的交互,从而实现更加灵活和复用的代码设计。
Javasuper关键字的使用方法详解
Javasuper关键字的使⽤⽅法详解构造⽅法中的super关键字在Java⼦类的构造⽅法中可以通过super关键字来调⽤⽗类的构造⽅法。
其⽤法为:1) super(); 访问⽗类中的⽆参构造函数2) super (paras…); 访问⽗类中的成员函数yyysuper()来调⽤⽗类⽆参的构造⽅法,但即使不使⽤super(),默认也会调⽤⽗类⽆参的构造⽅法。
⽗类⽆参的构造⽅法可以是⾃定义的⽆参构造⽅法,也可以是编译器⾃动⽣成的默认构造⽅法。
但如果⽗类中定义了有参的构造⽅法,但没有定义⽆参的构造⽅法,这时编译器不会⽣成默认构造函数,也就不能通过super()来调⽤构造⽅法。
此外,如果⽗类中定义了private的⽆参构造⽅法,也不同通过super()来调⽤。
super(paras…);⽤来调⽤⽗类中某个有参的构造⽅法。
super调⽤⽗类的构造⽅法,必须放在⼦类构造⽅法的第⼀⾏中执⾏。
如果调⽤的有参的⽗类构造⽅法,在super的参数中不能⽤⼦类中的⾮static成员变量(可以使⽤static成员变量,因为static成员变量在构造⽅法执⾏前就已经初始化),也不能使⽤this或super的相关调⽤。
例如super(super.getClass().getName());在构造⽅法中也可以使⽤super关键字来访问⽗类中的成员变量和成员函数。
其⽤法和⾮构造⽅法中的super关键字⽤法相同。
⾮构造⽅法中的super关键字在Java⼦类中可以通过通过super关键字来调⽤⽗类中的成员变量和⽅法。
其⽤法是。
1) super.xxx; 访问⽗类中的成员变量xxx2) super.yyy(paras…); 访问⽗类中的成员函数yyysuper关键字访问⽗类的成员变量和成员函数时不能越过访问权限的控制,不能访问⽗类中private的成员变量和⽅法。
例如:class a {private int mNum = 0;}class b extends a {public void setNum(int i) {super.mNum = i; //错误,不能访问⽗类的private成员}}在有多层的继承关系时,super调⽤只能⾃⾝⽗类的成员变量和⽅法,不能越过⽗类直接调⽤⽗类的⽗类中的成员变量或⽅法。
java中super的用法总结
java中super的⽤法总结package com.ssm.java;/*** Super* usage1:super. 直接去调⽤⽗类的⽅法和属性。
* usage2:放在构造器中的第⼀位,代表引⽤⽗类的构造器。
*/class SuperSub {String name;void value() {name = "China";}SuperSub(){System.out.println("⽗类,⽆参构造⽅法");}SuperSub(String name){System.out.println("⽗类,有参构造⽅法");}}public class SuperUsage extends SuperSub{String name;void value() {name = "Shanghai";super.value(); //调⽤⽗类的⽅法System.out.println(name);System.out.println();}SuperUsage(){super();//调⽤⽗类⽆参构造函数System.out.println("⼦类,⽆参构造⽅法");}SuperUsage(String name){super(name);//调⽤⽗类有参构造函数System.out.println("⼦类,有参构造⽅法");}public static void main(String[] args) {SuperUsage superUsage = new SuperUsage();superUsage.value();//输出结果 Shanghai ChinaSuperUsage superUsage1 = new SuperUsage();superUsage=new SuperUsage("li");/*** 输出结果:* ⽗类,⽆参构造⽅法* ⼦类,⽆参构造⽅法* ⽗类,有参构造⽅法* ⼦类,有参构造⽅法*/}}Super⽤法总结:* usage1:super. 直接去调⽤⽗类的⽅法和属性。
java的继承 super用法
java的继承 super用法在Java中,super关键字用于引用超类(父类)的相关方法、属性和构造函数。
它主要有以下几种用法:1.用于调用父类的构造函数:当子类实例化对象时,可以使用super关键字调用父类的构造函数来初始化父类的属性。
这对于需要在子类构造函数中执行一些额外的操作或者初始化父类属性非常有用。
```javapublic class Parentprivate int age;public Parent(int age)this.age = age;}public class Child e某tends Parentprivate String name;public Child(int age, String name)super(age); // 调用父类的构造函数 = name;}```2.用于调用父类的方法:子类可以使用super关键字来调用父类的方法,尤其在子类中重写了父类的方法时,通过super关键字可以调用父类的方法实现,而不是完全覆盖父类的方法。
```javapublic class Parentpublic void prinSystem.out.println("Parent class");}public class Child e某tends Parentpublic void prinsuper.print(; // 调用父类的方法System.out.println("Child class");}```3.用于访问父类的属性:当子类和父类都定义了同名的属性时,可以使用super关键字来访问父类的属性,以区分访问的是子类的属性还是父类的属性。
```javapublic class Parentprotected int num = 10;public class Child e某tends Parentprivate int num = 20;public void prinSystem.out.println("Child num: " + num); // 访问子类的属性System.out.println("Parent num: " + super.num); // 访问父类的属性}```通过使用super关键字,可以更灵活地使用继承机制,实现代码的重用和扩展性,并且提高了代码的可读性。
Javasuper关键字使用+案列
Javasuper关键字使⽤+案列 1package com.bytezero.supertest;2/*3 *4 * super关键字使⽤5 * 1.super:理解为⽗类的6 * 2.super可以使⽤调⽤:属性,⽅法,构造器7 *8 * 3.super的使⽤:调⽤属性,⽅法,9 *10 * 可以在⼦类的⽅法或构造器中。
通过使⽤“super.属性的” 或“super.⽅法”的⽅式,11 * 显⽰的调⽤⽗类声明的属性或⽅法。
但是,通常情况下,习惯省略“super.”12 *13 * 特殊情况:当⼦类与⽗类定义了同名的属性时:我们想要在⼦类中调⽤⽗类中声明的属性,则必须14 * 显⽰的使⽤:super.属性的⽅式,表明调⽤的是⽗类中声明的属性15 *16 * 特殊情况:当⼦类重写了⽗类的⽅法以后,我们想在⼦类的⽅法中调⽤了⽗类中被重写的⽅法时,17 * 则必须显⽰的使⽤:super.⽅法的⽅式,表明调⽤的是⽗类中被重写的⽅法18 *19 * 4.super调⽤构造器调⽤⽗类的构造器20 * 1.在⼦类的构造器中显⽰的使⽤"super(形参列表)"的⽅式,调⽤⽗类中声明指定的构造器21 * 2."super(形参列表)"的⽅式的使⽤,必须声明在⼦类构造器的⾸⾏!!22 * 3.我们在类的构造器中,针对于”this(形参列表)“或”super(形参列表)“,只能⼆选⼀,不能23 * 同时出现。
24 * 4.在构造器的⾸⾏,没有先显⽰的声明,”this(形参列表)“或”super(形参列表)“,则默认调⽤25 * 的是⽗类中空参的构造器:super();26 * 5.在类的多个构造器中,⾄少有⼀个类的构造器中,使⽤了”super(形参列表)“,调⽤⽗类中的构造器27 *28 *29 *30*/31public class SuperTest32 {33public static void main(String[] args) {3435 Student s = new Student();36 s.show();373839 System.out.println();40 s.study();4142 Student s1 = new Student("Tom",21,"IT");43 s1.show();4445 System.out.println("*******************");46 Student s2 = new Student();4748495051 }52 }1package com.bytezero.supertest;23public class Person4 {5 String name;6int age;7int id = 1001; //⾝份证好89public Person()10 {11 System.out.println("我⽆处不在");12 }13public Person(String name)14 { = name;16 }1718public Person(String name,int age)19 {20this(name);21this.age = age;2223 }24public void eat()25 {26 System.out.println("⼈,吃饭");27 }28public void walk()29 {30 System.out.println("⼈,⾛路");31 }3233343536 }1package com.bytezero.supertest;23public class Student extends Person {45 String major;6int id = 1002; //学号78public Student()9 {10super();11 }1213public Student(String major)14 {1516this.major = major;17 }18public Student(String name,int age,String major)19 {20// = name;21// this.age = age;22super(name,age);23this.major = major;24 }2526 @Override27public void eat()28 {29 System.out.println("学⽣多吃有营养的⾷物");30 }3132public void study()33 {34 System.out.println("学⽣:学习知识!");35this.eat();36super.eat();37//this.walk(); //都可以使⽤通常省略38//super.walk();39 walk();40 }414243public void show()44 {45 System.out.println("name=" + +",age="+super.age); 4647 System.out.println("id= " + this.id);48 System.out.println("id= "+super.id);49 }5051 }。
Java super
Java super关键字:supersuper的理解在Java类中使用super来调用父类中的指定操作:super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造器中调用父类的构造器注意:尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员super的追溯不仅限于直接父类super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识super的使用场景子类中调用父类被重写的方法如果子类没有重写父类的方法,只要权限修饰符允许,在子类中完全可以直接调用父类的方法;如果子类重写了父类的方法,在子类中需要通过super.才能调用父类被重写的方法,否则默认调用的子类重写的方法举例:package com.atguigu.inherited.method;public class Phone {public void sendMessage(){System.out.println("发短信");}public void call(){System.out.println("打电话");}public void showNum(){System.out.println("来电显示号码");}}//smartphone:智能手机public class SmartPhone extends Phone{//重写父类的来电显示功能的方法public void showNum(){//来电显示姓名和图片功能System.out.println("显示来电姓名");System.out.println("显示头像");//保留父类来电显示号码的功能super.showNum();//此处必须加super.,否则就是无限递归,那么就会栈内存溢出}}总结:方法前面没有super.和this.先从子类找匹配方法,如果没有,再从直接父类找,再没有,继续往上追溯方法前面有this.先从子类找匹配方法,如果没有,再从直接父类找,再没有,继续往上追溯方法前面有super.从当前子类的直接父类找,如果没有,继续往上追溯子类中调用父类中同名的成员变量如果实例变量与局部变量重名,可以在实例变量前面加this.进行区别如果子类实例变量和父类实例变量重名,并且父类的该实例变量在子类仍然可见,在子类中要访问父类声明的实例变量需要在父类实例变量前加super.,否则默认访问的是子类自己声明的实例变量如果父子类实例变量没有重名,只要权限修饰符允许,在子类中完全可以直接访问父类中声明的实例变量,也可以用this.实例访问,也可以用super.实例变量访问举例:class Father{int a=10;int b=11;}class Son extends Father{int a=20;public void test(){//子类与父类的属性同名,子类对象中就有两个aSystem.out.println("子类的a:"+a);//20 先找局部变量找,没有再从本类成员变量找 System.out.println("子类的a:"+this.a);//20 先从本类成员变量找System.out.println("父类的a:"+super.a);//10 直接从父类成员变量找//子类与父类的属性不同名,是同一个bSystem.out.println("b = "+b);//11 先找局部变量找,没有再从本类成员变量找,没有再从父类找System.out.println("b = "+this.b);//11 先从本类成员变量找,没有再从父类找System.out.println("b = "+super.b);//11 直接从父类局部变量找 }public void method(int a, int b){//子类与父类的属性同名,子类对象中就有两个成员变量a,此时方法中还有一个局部变量aSystem.out.println("局部变量的a:"+a);//30 先找局部变量System.out.println("子类的a:"+this.a);//20 先从本类成员变量找System.out.println("父类的a:"+super.a);//10 直接从父类成员变量找System.out.println("b = "+b);//13 先找局部变量System.out.println("b = "+this.b);//11 先从本类成员变量找System.out.println("b = "+super.b);//11 直接从父类局部变量找 }}class Test{public static void main(String[] args){Son son=new Son();son.test();son.method(30,13);}子类构造器中调用父类构造器①子类继承父类时,不会继承父类的构造器。
java继承学习之super的用法解析
java继承学习之super的⽤法解析继承supersuper关键字的⽤法和this关键字的⽤法相似this:代表本类对象的引⽤super:代表⽗类存储空间的标识(可以理解为⽗类对象引⽤)package com.ithema_20;/*测试类继承supersuper关键字的⽤法和this关键字的⽤法相似this:代表本类对象的引⽤super:代表⽗类存储空间的标识(可以理解为⽗类对象引⽤)*/public class Demo {public static void main(String[] args){//创建对象,调⽤⽅法Zi z = new Zi();z.show();}}package com.ithema_20;/*测试类继承supersuper关键字的⽤法和this关键字的⽤法相似this:代表本类对象的引⽤super:代表⽗类存储空间的标识(可以理解为⽗类对象引⽤)*/public class Demo {public static void main(String[] args){//创建对象,调⽤⽅法Zi z = new Zi();z.show();}}package com.ithema_20;public class Zi extends Fu{public int age = 20;public void show(){int age = 30;System.out.println(age);//我要访问本类的成员变量age,怎么办呢?System.out.println(this.age);//我要访问⽗类的成员变量age,怎么办呢System.out.println(super.age);}}到此这篇关于java继承学习之super的⽤法解析的⽂章就介绍到这了,更多相关 super的⽤法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
super 关键字的使用 super 关键字出现在子类中,主要功能就是完成子类调用父类中的内容,也就是调用父类中的属性或方法。
super 调用父类中的构造方法:
class Person
{
String name;
int age;
public Person(String name,int age)
{
=name;
this.age=age;
}
}
class Student extends Person
{
String school;
public Student()
{
super("张三",27);
}
}
public class TestPersonStudentDemo
{
public static void main(String args[])
{
Student s=new Student();
S.shchool=”北京”;
System.out.println("我是:"++",今年:"+s.age+"岁,学校:"+s.school) ; }
}
输出结果为:我是张三,今年27岁,学校:北京
本程序在子类的构造方法中明确地指明了调用的是父类中有两个参数的构造方法,所以程序在编译时不再去找父类中无参的构造方法。
用super 调用父类中的构造方法,只能放在子类的第一行。
通过super 调用父类的属性和方法:
class Person 父类构造方法
子类构造方法 调用父类构造方法
{
String name;
int age;
public Person()
{
}
public String talk()
{
return "我是:"++",今年:"+this.age+"岁";
}
}
class Student extends Person
{
String school;
public Student(String name,int age,String school)
{
//在这里用super 调用父类中的属性
=name;
super.age=age;
//调用父类中的talk()方法
System.out.print(super.talk());
//调用本类中属性
this.school=school;
}
}
public class TestPersonStudentDemo3
{
public static void main(String args[])
{
Student s=new Student("张三",27,"北京");
System.out.println(",学校:"+s.school);
}
}
输出结果为:
我是:张三,今年:27岁,学校:北京
限制子类的访问
有些时候,父类并不希望子类可以访问自己的类中全部的属性或方法,所以需要将一些属性父类构造方法
子类构造方法 父类一般方法
与方法隐藏起来,不让子类去使用。
为此,可在声明属性或方法时加上“private”关键字,表示私有。
class Person
{
private String name;
private int age;
}
class Student extends Person
{
public void setVar()
{
name="张三";
age=27;
System.out.println(name+age);
}
}
class TestPersonStudentDemo
{
public static void main(String args[])
{
Student s=new Student();
s.setVar();
}
}
输出结果为:
Exception in thread "main" ng.Error: 无法解析的编译问题:
字段 不可视
字段Person.age 不可视
字段 不可视
字段Person.age 不可视
at exercise1.Student.setVar(TestPersonStudentDemo.java:11)
at exercise1.TestPersonStudentDemo.main(TestPersonStudentDemo.java:21)。