java全栈系列之JavaSE-面向对象(super详解)036
作者:互联网
super和this之间的关系
super代表父类的属性,this代表当前类的属性
子类调用父类时this和super的区别
package Test_Demo4;
import Test_Demo1.Demo13;
public class Demo1 {
public static void main(String[] args) {
Demo3 D= new Demo3(); //实例化对象
D.Print("李四"); //调用Print方法时传参
}
}
class Demo2{ //创建Demo2父类,并创建父类属性name
String name="张三";
public Demo2(){ //显式构造方法,名字与类名一致且没有返回值
}
}
class Demo3 extends Demo2{ //创建Demo3并继承Demo2的属性和方法
String name="王二"; //定义类变量
public void Print(String name){ //创建输出方法,定义形式参数name
System.out.println(this.name); //this.name是当前类下的name
System.out.println(super.name); //super是父类的name属性
System.out.println(name); //形式参数name
}
}
执行结果:
王二
张三
李四
子类调用父类的方法时this和super的区别
package Demo1;
public class Demo001 {
public static void main(String[] args) {
Demo003 D3=new Demo003(); //实例化对象
D3.test(); //调用Demo003下的test()方法
}
}
class Demo002{ //定义Demo002方法用作父类
String name="张三"; //定义实例变量赋予初始值
public void demo(){ //定义公共方法
System.out.println(this.name); //输出当前类中的name属性
}
}
class Demo003 extends Demo002{ //定义Demo003用于继承Demo002的属性和方法
String name="李四"; //定义实例变量赋予初始值
public void demo(){ //定义公共方法
System.out.println(this.name); 输出当前类中的name属性
}
public void test(){ //创建测试方法用于实现方法的调用
this.demo(); //调用当前类的demo()方法
super.demo(); //调用父类的demo()方法
demo(); //调用公共类的demo()方法
}
}
执行结果:
李四
张三
李四
父类方法的调用
使用继承的时候如果要继承父类的方法需要在前面的修饰符加上public(公共的)才能够使子类继承父类的方法
如果子类在继承父类的方法或者属性时,前面的修饰符为private(私有的)时则子类无法直接进行调用或者操作
父类属性前加修饰符private子类无法直接调用
使用get/set方法进行私有属性方法调用
虽然无法直接调用父类的private属性,但是可以通过get/set方法进行调用和修改
public class Demo004 {
public static void main(String[] args) {
Demo007 D7=new Demo007(); //实例化对象
String s1=D7.getName(); //将D7.getName()方法赋值于s1属性
System.out.println(s1); //输出s1
}
}
class Demo006{ //定义Demo006类
private String name="许志滨2"; //定义私有属性
private void demo006(){ //定义私有方法
System.out.println(this.name);
}
public String getName() { //定义getName()方法
return name;
}
public void setName(String name) { //定义setName()方法
this.name = name;
}
}
class Demo007 extends Demo006{ //定义Demo007类用于集成Demo006
public Demo007(){
//构造方法,不写默认也会有
}
}
执行结果:许志滨2
为什么没有输出两次许志滨2,因为只是调用了name属性,并未调用demo006的方法
使用set方法对私有属性进行修改
Demo007 通过继承Demo006类使用set()方法将私有属性进行修改
package Demo1;
public class Demo004 {
public static void main(String[] args) {
Demo007 D7=new Demo007();
D7.setName("许志滨666"); //调用时传实际参数
D7.demo006(); //调用demo006公共方法
}
}
class Demo006{
private String name="许志滨2"; //定义私有属性
public void demo006(){ //定义公共方法
System.out.println(this.name); //输出当前类name的值
}
public void setName(String name) { //创建set方法
this.name = name;
}
}
class Demo007 extends Demo006{ //继承
public Demo007(){
}
}
注意:父类的私有方法无法被继承
无参构造器的调用
package Demo1;
public class Demo008 {
public static void main(String[] args) {
new demo010(); //调用无参构造
}
}
class demo009{
public demo009(){ //定义无参构造
System.out.println("demo009");
}
}
class demo010 extends demo009{ //继承demo009
public demo010(){ //定义无参构造
System.out.println("demo010");
}
}
执行结果:
demo009
demo010
在demo010构造方法中隐形的在首部调用了父类的构造方法
class demo010 extends demo009{
public demo010(){
super(); //隐形在首部调用了父类的构造方法
System.out.println("demo010");
}
}
且super();会默认的被隐形添加,只能写在构造方法的首部
小结
super调用父类的构造方法,必须在构造方法的首部
super必须只能出现在子类的方法或者构造方法中
super和this不能同时调用构造方法
this没有继承关系也可以进行调用,super只能在有继承条件下才能使用
this本类构造,super父类构造
标签:调用,java,name,class,全栈,父类,036,public,String 来源: https://blog.csdn.net/xuzhibin666/article/details/119464891