System.out.println(super.getClass().getName())

本文深入探讨了Java中super关键字的使用误区,通过具体代码示例解释了super.getClass()的真正含义,以及如何正确获取父类名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 import java.util.Date;  
 public  class Test extends Date{ 
     public static void main(String[] args) { 
        new Test().test(); 
     }
     public void test(){ 
        System.out.println(super.getClass().getName());     
     }  
 }

结果是:Test
今天看到一道基础题,随即琢磨一下。一开始脑海中直接蹦出:Date,但是仔细想想,应该没有那么直接的答案吧。分析结论是:super.getClass()并不能代表超类的引用。
我们可以尝试在test方法中直接调用getClass().getName()方法,结果返回的是子类名称:Test。

事实上,super.getClass()是表示调用父类的方法。getClass方法来自Object类,它返回的对象是正在运行时的类型。
在这里,正在运行时的对象类型是Test,所以this.getClass()和super.getClass()都是返回Test。同时,getClass()在Object类中使用final关键字修饰,子类不能覆盖该方法,因此,在test方法中调用getClass().getName()方法,实际上调用的是父类继承的getClass()方法,所以,super.getClass().getName()方法返回的也应该是Test。

想得到父类的名称,可以使用如下代码:

 import java.util.Date;  
 public  class Test extends Date{ 
     public static void main(String[] args) { 
        new Test().test(); 
     }
     public void test(){ 
        System.out.println(getClass().getSuperClass().getName());     
     }  
 }
/import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.TreeSet; public class Test1 { public static void main(String[] args){ Set<Test.Books> set = new HashSet<>(); TreeSet<Test.Books> tree = new TreeSet<>(); Test.Books books1 = new Test.Books(01,"坤坤成长史",520,"我的心"); Test.Books books2 = new Test.Books(02,"坤坤帅哥",1314,"我的脑子"); Test.Books books3 = new Test.Books(03,"双开门大冰箱",999,"我的幻想"); Test.Books books4 = new Test.Books(01,"坤坤成长史",520,"我的心"); set.add(books1); set.add(books2); set.add(books3); set.add(books4); //TreeSet(): 根据其元素的自然排序进行排序 tree.add(books1); tree.add(books2); tree.add(books3); tree.add(books4); System.out.println("HashSet:"); for(Test.Books s1 : set){ System.out.println(s1.getNumber() + s1.getname() + s1.getPrice() +s1.getPublisher()); } System.out.println("TreeSet:"); for(Test.Books s2 : tree){ System.out.println(s2.getNumber() + s2.getname() + s2.getPrice() +s2.getPublisher()); } } //Set没有带索引的方法 //TreeSet 无参构造方法 自然排序 让元素所属的类实现Comparable接口,重写compareTo方法 //重写方法,注意主要条件和次要条件 static abstract class Books implements Comparable<Books> { private int number; private String name; private double price; private String publisher; public Books(){ } Books(int number,String name,double price,String publisher){ super(); this.number = number; this.name = name; this.price = price; this.publisher = publisher; } public int getNumber(){ return number; } public String getname(){ return name; } public double getPrice() { return price; } public String getPublisher() { return publisher; } @Override public int hashCode() { return 0; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Books books = (Books) o; return number == books.number && Double.compare(books.price, price) == 0 && Objects.equals(name, books.name) && Objects.equals(publisher, books.publisher); } public int compareTo(Books s2){ return 1; } } }请帮我修改
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值