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面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
23 1
|
2月前
|
Java 开发者
Java中的并发编程:深入理解synchronized关键字
在Java并发编程的领域中,synchronized关键字是实现线程同步的基础工具之一。本文将深入剖析synchronized的作用机制,探讨其在多线程环境下确保数据一致性的重要性,并通过实际案例展示其应用。同时,文章还将比较synchronized与Lock接口的不同之处,以助于开发者更好地选择适合自己场景的同步策略。
|
2月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
23 0
|
6天前
|
Java 开发者
【Java编程新纪元】JDK 22:超级构造函数来袭,super(...) 前导语句改写编程规则!
【9月更文挑战第6天】JDK 22的超级构造函数特性是Java编程语言发展史上的一个重要里程碑。它不仅简化了代码编写,还提升了代码的可读性和维护性。我们有理由相信,在未来的Java版本中,还将有更多令人兴奋的新特性等待我们去发现和应用。让我们共同期待Java编程新纪元的到来!
|
2月前
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
50 6
|
22天前
|
Java
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。
|
2月前
|
算法 Java API
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
|
2月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
53 4
|
2月前
|
安全 Java
Java面试题:解释synchronized关键字在Java内存模型中的语义
Java面试题:解释synchronized关键字在Java内存模型中的语义
37 1
|
2月前
|
设计模式 缓存 安全
Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题
Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题
42 1