导航:首页 > 编程语言 > java判断子类

java判断子类

发布时间:2022-09-19 23:21:32

A. 怎么分java中的主类和子类

好像只有父类和子类吧。extends前面的类叫父类,extends后面的叫子类,二者是继承关系。整个程序只有一个主方法,就是main方法。但是类有很多。

B. java如何判断一个类是不是另一个的子类

ClassclazzA=A.class;
ClassclazzB=B.class;
booleanisFather=clazzB.isAssignableFrom(clazzA));
if(isFather){
System.out.println("B是A的父类");
}else{
System.out.println("B不是A的父类");
}

C. java instanceof 判断子类的问题

Object o = new Test();
关键还是看你实现的那个类Test,而不是看Object

D. 问个问题: java 中,函数调用,传入参数是个父类,要判断传入参数是父类的哪个子类怎么判断啊

一般这种东西不建议这样用,因为强转毕竟是不好的
有2种方法
1 instanceof 关键字 object instanceof class ,
2 getClass() 方法

E. 在java 中 父类定义的静态方法 子类 调用时候 如何 知道 是哪个子类调用的

1)父类构造函数
java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码
块总是会被执行,接着调用父类的一个或者多个构造器执行初始化,这个调用也可以通过super进行显式调用。
例如:
父类代码如下:
public class Creature {//父类
{//非静态代码块
System.out.println("creature的非静态代码块正在执行");
}

public Creature(){
System.out.println("creature的构造函数正在执行");
}
}
子类代码如下:
public class Animal extends Creature {
{
System.out.println("animal的初始化代码块正在执行");
}
public Animal(){
System.out.println("animal的构造方法正在执行");
}

public static void main(String[] args){
Animal a = new Animal() ;
}
}
则运行程序后的结果为:
creature的非静态代码块正在执行
creature的构造函数正在执行
animal的初始化代码块正在执行
animal的构造方法正在执行
从结果中可以看出:调用某个类的构造方法的时候总是会先执行父类的非静态代码块,然后执行父类的构造方法,最后才是执行当前类的。
非静态代码块和构造方法。执行过程中有先后顺序。
若果想要显式调用父类的构造方法则可以使用super(),来调用,但是super关键字和this关键字都必须放在构造放的第一行,而且只能使用第一个。
注:super用于显式调用父类的构造器,this可以显式调用本类中的重载的构造器。

2)访问子类对象的实例变量
子类的方法可以访问父类中的实例变量,这是因为子类继承父类就会获得父类中的成员变量和方法,但是父类方法不能访问子类的实例变量,因为父类根本无法知道它将被哪个类继承,它的子类将会增加怎么样的成员变量。但是,在极端的情况下,父类也可以访问子类中的变量。
例如:
父类代码如下:
public class Base {//父类
private int i = 2 ;
public Base(){
this.display() ;
}
public void display(){
System.out.println(i);
}
}
子类中代码如下:
public class Derived extends Base {
private int i = 22 ;
public Derived(){
i = 222 ;
}
public void display(){
System.out.println(i);
}
}
测试用例如下:
public class Test {
public static void main(String[] args) {
new Derived() ;
}
}
程序的执行结果为:
0
调用new Derived() ;创建Derived
实例的时候,系统会为Derived对象分配内存空间,Derived会有两个i实例变量,会分配两个空间来保存i的值。分配完空间以后i的值为0
,如果有引用类型则引用类型的值为null。接下来程序在执行Derived的构造器之前会执行Base的构造器,表面上看Base的构造器中只有
一行代码,但是在父类中定义i的时候执行的初始值2,因此经过编译之后,该构造方法中应该包含如下两行代码:
i =2 ;
this.display() ;
程序先将Base中的i赋值为2,然后执行display方法。此处有一个关键字this,this到底代表谁呢?表面上看this代表的是Base的当前实例,但是实际上代码是放在Derived的构造器中的,所以this最终代表的是Derived的当前实例(编译类型是Base而实际引用一个Derived对象),所以如果在父类的构造方法中直接输出System.out.println(this.i) ;则输出的结果为2。但是调用this.display()方法,此时调用的是子类中重写的display方法,输出的变量i也是子类中的i,但是此时子类中的变量i还没有赋值,所以输出结果为0。
为了详细的看清楚this变量到底代表什么实例,我们将Base的构造方法修改如下:
public Base(){
System.out.println(this.i);
System.out.println(this.getClass());
this.display() ;
}
再次运行程序,结果为:
2
class e.qichao.chapter2.Derived
0
可以看到this代表的是Derived的实例,但是编译的时候类型为Base,所以输出this.i的值为2。

3)调用被子类重写的方法
默认情况下,子类可以调用父类的方法,但是父类不能调用子类的方法,因为父类不知道它将被哪个子类继承,也不知道子类将增加怎么
样的方法。
例如:
父类Animal的代码如下:
public class Animal {
private String desc ;

public Animal(){
this.desc = getDesc() ;
}

public String getDesc(){
return "Animal" ;
}

public String toString(){
return desc ;
}
}
子类Wolf的代码如下:
public class Wolf extends Animal {
private String name ;
private double weight ;
public Wolf(String name , double weight){
this.name = name ;
this.weight = weight ;
}
public String getDesc(){
return "Wolf[name=" + name + ",weight=" + weight + "]" ;
}

public static void main(String[] args){
System.out.println(new Wolf("灰太狼" , 3));
}
}
程序的运行结果为:
Wolf[name=null,weight=0.0]
在main方法中通过new Wolf("灰太狼" , 3);来创建一个Wolf的实例,子类会隐式调用父类的构造方法,在父类构造方法中初始化desc变量this.desc = getDesc() ;此处需要注意this变量,虽然这个this放在Animal的构造放中,但是是在Wolf的构造方法中调用父类的构造方法,所以this编译时类型为Animal,运行时类型为Wolf,此处调用的getDesc方法是子类Wolf的方法,但是子类中的name和weight变量都没有初始化,默认为null和0.0.所以程序的最终结果为:Wolf[name=null,weight=0.0]

4)继承成员变量和成员方法的区别
java中队成员变量的继承和成员方法的继承是不同的。
例如:
父类代码如下:
public class Base {
int count = 2 ;
public void display(){
System.out.println(this.count);
}
}
子类代码如下:
public class Derived extends Base {
int count = 20 ;
@Override
public void display(){
System.out.println(this.count);
}
}
测试用例如下:
public class Test {
public static void main(String[] args) {
Base b = new Base() ;
System.out.println(b.count);
b.display() ;
System.out.println("-----------------");
Derived d = new Derived() ;
System.out.println(d.count);
d.display() ;
System.out.println("-----------------");
Base bd = new Derived() ;
System.out.println(bd.count);
bd.display() ;
System.out.println("-----------------");
Base d2b = d ;
System.out.println(d2b.count);
}
}
程序运行结果为:
2
2
-----------------
20
20
-----------------
2
20
-----------------
2

F. Java中判断父类是否为子类的实例这句话什么意思!

这句话好像有错,要说也应该是“子类是否为父类的实例”
例如Throwable是Exception类的父类,要判断Exception是否是Throwable的子类实例,使用instanceof操作符号。
boolean
isTrue
=
子类实例变量名称
instanceof
父类类名;

G. Java中怎么判断一个子类是这个子类

import java.io.FileNotFoundException;

import java.io.FileReader;
import java.io.Reader;

import org.junit.Test;

public class InstanceTest {
@Test
public void test() throws FileNotFoundException {
FileReader fr = new FileReader("d:\\abc.txt");
System.out.println(fr instanceof Reader);

//这里是多态,父类引用指向子类对象
Reader reader = new FileReader("d:\\abc.txt");
System.out.println(reader instanceof FileReader);
System.out.println(reader instanceof Reader);

H. java 如何判断使用父类的哪个子类

判断class的getSuperclass() 是否和父类的class相同 。。。。。。。。。

I. 什么是后面类 在JAVA中instanceof运算符 的作用是判断对象是否是后面类 子类、实现类的实例.

举例说明下吧:
定义三个类
public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。

J. java中什么叫子类

java中子类的定义为在有继承关系的类中extends前面的类则是子类。

阅读全文

与java判断子类相关的资料

热点内容
php备案号 浏览:986
php视频水印 浏览:163
怎么追程序员的女生 浏览:485
空调外压缩机电容 浏览:77
怎么将安卓变成win 浏览:457
手机文件管理在哪儿新建文件夹 浏览:723
加密ts视频怎么合并 浏览:775
php如何写app接口 浏览:803
宇宙的琴弦pdf 浏览:395
js项目提成计算器程序员 浏览:944
pdf光子 浏览:834
自拍软件文件夹名称大全 浏览:328
程序员留学移民 浏览:52
梁中间部位箍筋加密区 浏览:119
频谱分析pdf 浏览:752
乐2怎么升级安卓70 浏览:174
java中获取日期 浏览:508
单片机74hc245 浏览:274
美国历史上的总统pdf 浏览:753
程序员脱单实验室靠不靠谱 浏览:460