Java零基础入门:super关键字(四)

简介: Java零基础入门:super关键字(四)


博主简介:

博客主页:Java知识分享博主

Java零基础入门专栏:Java零基础入门专栏

Java交流社区:飞鸟社区

欢迎阅读,如果文章对你有帮助点赞,支持一下!


文章目录


推荐阅读

Java零基础入门:概论(一)

Java零基础入门:实战教程(二)

Java零基础入门:接口的实现(三)

前言:

有一天,室友问我super怎么用的,我灵机一动!嘿,这就问对人了,于是我就一本正经回答他,super关键字有两个用处:一是调用超类的方法,不能调用本类的方法,直接从父类调用,如果父类没有,就从爷爷类调用,二是调用超类的构造器。

成员B类:

B_子类 extends A_父类,这时super.cal()是调用A类的n1值和cal()方法,而不是调用自身的cal()方法

package text;
public class B extends A {
  public int n1=888;
  //编写测试的方法
  public void test() {
    System.out.println("super.n1="+super.n1);
    super.cal();
  }

主类super01:

package text;
//super的关键字知识学习
public class super01 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    B b=new B();
    //b.sum();
    b.test();
  }
}

成员B类:

测试hi()方法,cal()方法,sum()方法,

显然hi()super调用A类的n1,n2,n3的值,cal()方法调用本类,sum()方法中先调用本类,如果没有找父类,还是没有,继续找父类的父类,而super.cal()cal方法的顺序是直接查找父类

  public void hi() {
    System.out.println(super.n1+" "+super.n2+" "+super.n3);
  }
  public void cal() {
    System.out.println("B类的cal()方法。。。");
  }
  public void sum() {
    System.out.println("B类的sum()");
    //先调用本类,如果没有找父类,还是没有,继续找父类的父类
    //cal();
    super.cal();//找cal方法的顺序是直接查找父类,其他规则一样
    //先调用本类,如果没有找父类,还是没有,继续找父类的父类
    System.out.println(n1);
    System.out.println(this.n1);
    System.out.println(super.n1);//直接调用父类
  }
}
b.cal();
b.sum();
b.hi();

测试结果:

B类的cal()方法。。。

B类的sum()

A类的cal()方法…

888

888

100

100 200 300


成员A类:

package text;
public class A extends Base{  //A_子类的父类是Base类
  public int n1 =100;
  protected int n2 =200;
  int n3=300;
  private int n4 =400;//私有属性,不能被父类调用
  public A() {}
  public A(String name) {}
  public A(String name,int age) {}
  public void cal() {  //private私有属性
    System.out.println("A类的cal()方法...");
    super.cal();
  }
}


成员Base 类:

package text;
public class Base {
  public int n1 =101;
  public int age =100;
  public void cal() {
    System.out.println("Base类的cal()方法...");
  }
  public void eat() {
    System.out.println("Base类的eat()方法...");
  }
}

思考:那么在A类cal()方法找super.cal()的结果是什么,评论区考虑!


相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
134 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
5月前
|
存储 安全 Java
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
40 1
|
5月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
52 0
|
2月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
140 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
34 0
|
3月前
|
Java 开发者
【Java编程新纪元】JDK 22:超级构造函数来袭,super(...) 前导语句改写编程规则!
【9月更文挑战第6天】JDK 22的超级构造函数特性是Java编程语言发展史上的一个重要里程碑。它不仅简化了代码编写,还提升了代码的可读性和维护性。我们有理由相信,在未来的Java版本中,还将有更多令人兴奋的新特性等待我们去发现和应用。让我们共同期待Java编程新纪元的到来!
|
5月前
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
105 6
|
4月前
|
Java
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。
|
5月前
|
算法 Java API
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
|
5月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
78 4