首页 > 编程语言 >java 类继承关系

java 类继承关系

时间:2023-05-02 16:13:04浏览次数:33  
标签:关系 java 继承 System class println Class out

获取继承关系

java中没有多继承, 故一个类最多只有一个父类, 但可实现多个接口. 利用反射可获取类的信息(属性, 方法, 继承关系)

获取类自身

Class cz1 = String.class;
Class cz2 = "abc".getClass();
Class cz3;
try {
    cz3 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
    throw new RuntimeException(e);
}
System.out.println(cz1);   // class java.lang.String
System.out.println(cz2);   // class java.lang.String
System.out.println(cz3);   // class java.lang.String

其中通过Class.forName​获取类类型, 需要传递完整的包名

获取父类

getSuperclass

获取的父类不带泛型

 Class cz = Integer.class.getSuperclass();
 System.out.println(cz);  // class java.lang.Number

getGenericSuperclass

可获得带泛型的父类

public class Test {
    public static class T<T1, T2> {}
    public static class Template extends T<Integer, String> {}

    public static void main(String[] args) {
        Template tt = new Template();
  
        Class clazz = tt.getClass();
        System.out.println(clazz);
   
        System.out.println(clazz.getSuperclass());   
        // getGenericSuperclass() 获得该类带有泛型的父类
        Type type = clazz.getGenericSuperclass();
        System.out.println(type);
        // ParameterizedType 参数化类型,即泛型
        // 将Type转化为参数化类型(即泛型)
        ParameterizedType p = (ParameterizedType) type;
        // getActualTypeArguments() 获取参数化类型的数组,泛型可能有多个
        Type[] actualTypeArguments = p.getActualTypeArguments();
        // 将Type转化为类型变量(即Class)
        Class c1 = (Class) actualTypeArguments[0];
        Class c2 = (Class) actualTypeArguments[1];
        System.out.println(c1);
        System.out.println(c2);
    }
}
class Test$Template
class Test$T
Test$T<java.lang.Integer, java.lang.String>
class java.lang.Integer
class java.lang.String

getSuperclass与getGenericSuperclass的区别:

  • getSuperclass: 获取直接父类
  • getGenericSuperclass: 获取带泛型的父类(没有泛型获取的就是直接父类的类型)
  • 返回类型不同: getSuperclass为Class, getGenericSuperclass为Type

判断类型是否可转

实例类型转换

Object obj = "abc";
String str  = null;
if(obj instanceof String) {
     str = (String) obj;
}

类类型转型

Object.class.isAssignableFrom(String.class)

判断String是否可转为类型Object

获取接口列表

getInterfaces

由于类可继承多个接口, 故getInterfaces​返回的是一个类数组

Class s = Integer.class;
Class[] czs = s.getInterfaces();
for (Class cz : czs) {
    System.out.println(cz);
}
interface java.lang.Comparable
interface java.lang.constant.Constable
interface java.lang.constant.ConstantDesc

getGenericInterfaces

返回的接口带泛型参数

class InterfaceDemo<K,V> implements Serializable,Cloneable, Map<K, V> { ... }
InterfaceDemo<Integer,String> iDemo = new InterfaceDemo();
for(Class t : iDemo.getClass().getInterfaces()) {
    System.out.println(t);
}
System.out.println("--------------------------");
for(Type t : iDemo.getClass().getGenericInterfaces()) {
    System.out.println(t);
}
interface java.io.Serializable
interface java.lang.Cloneable
interface java.util.Map
--------------------------
interface java.io.Serializable
interface java.lang.Cloneable
java.util.Map<K, V>

标签:关系,java,继承,System,class,println,Class,out
From: https://www.cnblogs.com/shmilyt/p/17367811.html

相关文章

  • Java cmd下编译乱码问题解决办法
    1、报错样式 2、解决办法1)指定字符集,如下 2)修改编码格式通过“记事本”打开—》另存为3)修改环境变量此电脑——》属性——》高级系统设置——》环境变量——》(系统环境变量)新建——》“JAVA_TOOL_OPTIONS” “-Dfile.encoding=UTF-8”如下图:——》重启cmd,再......
  • Java面向对象
     Java面向对象:封装,继承,多态(对像上转型),抽象每一个对象都有两个特征:属性(成员变量),行为(成员方法) 继承:被继承的类叫父类,反之为子类(关键字:extends)class子类extends父类  (注:Java语言只支持单重继承){……} 如果父类和子类中都定义了初始化器,则构造子类对象时,调用顺序为:......
  • 7、Java内置工具类
    Java内置工具类1.字符串类1.String类String类不能被修改其被修改的本质是申请新的内存空间,所以其每一次更改都会new新的对象适用于需要量小不怎么修改的字符串时2.StringBuffer和StringBuilderStringBuffer是多线程安全的类,适用于多线程。StringBuilder是多线程不安全......
  • 简单总结JavaScript中的微任务和宏任务
    在JavaScript中,任务被分为宏任务和微任务。宏任务:常见的宏任务有setTimeout、setInterval、I/O、UI渲染等等。这些任务都是由浏览器或Node.js中的事件循环调度执行的,它们会被放入一个任务队列(taskqueue)中,等待执行。微任务:常见的微任务有Promise、MutationObserver等。......
  • 理解 Java8 的时间API(二)时间
    理解Java8的时间API:java.time上一篇介绍了Java8里新的时区API。这一篇介绍新的时间API:LocalDateTime,LocalDate,LocalTime类。三、Java8中的时间最常用的应该是java.time.LocalDateTime,java.time.LocalDate,java.time.LocalTime,java.time.Instant这几个类。3.1LocalDateTim......
  • Java 网络编程 —— ServerSocket 详解
    构造ServerSocketServerSocket的构造方法有以下几种重载形式ServerSocket()throwsIOExceptionServerSocket(intport)throwsIOExceptionServerSocket(intport,intbacklog)throwsIOExceptionServerSocket(intport,intbacklog,InetAddressbindAddr)throwsIOE......
  • java反转部分链表后记
    由于链表只是一个单向链表所以不能在一次循环之内就直接进行反转操作又因为只需要反转部分链表所以只要将链表遍历到需要反转的最后一位,剩下的不用管了于是我想到了在第一遍循环中用HashMap获取需要反转的链表的部分,键代表下标,值代表原先链表中val之后第二遍遍历时按照将值按......
  • [Javascript] avoid mutation: Array.prototype.toSpliced() vs splice()
    Array.prototype.splice()mutatestheoriginalarray.Toavoidmutation,weuseArray.prototype.slice().newmethodArray.prototype.toSpliced()returnanewarraytoavoidthemutation.constmonths=["Jan","Mar","Apr",&quo......
  • [Javascript] Avoid mutation, Array.prototype.toSorted() vs sort()
    sort(),mutatestheoriginalarray,andreturnthereferencetooriginalarrayandsorted.The toSorted() methodof Array instancesisthe copying versionofthe sort() method.Itreturnsanewarraywiththeelementssortedinascendingorder.const......
  • [Javascript] Avoid mutation, Array.prototype.toReversed() vs reverse()
    reverse()mutatestheoriginalarray,returnthereferencepointtotheoriginalarray.The toReversed() methodof Array instancesisthe copying counterpartofthe reverse() method.Itreturnsanewarraywiththeelementsinreversedorder.constite......