❶ java多态中重载方法参数分别为父类和子类时的疑惑
A ab = new B();
这里ab的引用类型是A,但是它指向的内存是类型为B的一个实例
想对ab进行方法调用,你调用的方法都必须在 class A里面有的才行(因为你的引用类型为A)
这里 class A有show(A obj) show(D obj)着两个方法
ab.show(b) 在class A中没有找到类型匹配的方法,但是对b进行类型提升后,可以找到 show(A obj)方法,同理 ab.show(c)也是show(A obj)方法;但是ab内存地址指向一个类型为B内存空间,如果class B Override 了 class A的show(A obj)方法,则调用B的方法,反之,则调用A自己的方法
可以猜测 D d = new D(); ab.show(d)的结果是 A and D
如果注释掉 class A的 show(A obj)方法, ab.show(b) ab.show(c)都会出错。
这里你只要记住,能调用那些方法,由引用类型决定,具体执行情况,由实际内存对象类型决定
❷ JAVA中,子类将继承父类的所有属性和方法么~为什么
是的,子类将继承父类的非私有的属性和方法。
在JAVA中,子类继承父类的所有方法和属性(构造方法要用关键super([参数])调用);继承是JAVA中一个重要的特色,便于程序的编写,提高代码的重用性。
1、如果给子类i提供get和set 通过get调用的自然是子类的。
2、如果给父类和子类分别提供get和set,调的仍然是子类的,因为方法被重写。
(2)java参数子类扩展阅读
在继承中用到super调用父类的构造
private String name;
private String sex;
public xinxin1(String name,String sex)
{
this.name=name;
this.sex=sex;
}
public void hello(){
System.out.println(“嗨!我是”+name+”我是”+sex+”孩”);
}
❸ java方法参数是父类,为什么在方法实现中参数变成子类
因为子类继承了父类的公有属性和方法,所以如果参数需要一个类的话可以是这个类的本身或者他的子类!
希望可以帮到你!
❹ java 方法参数是父类,为什么在方法实现中参数变成子类
java的重写和重载是两种在java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。
java的多态机制
即重写,重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化,例如:
class
animal{
void
eat(){
system.out.print("animal
eat");}
}
class
tiger
extends
animal{
void
eat(){system.out.print("tiget
eat");}
}
子类中的eat方法即对父类的eat方法实现了重写,重写最常见的例子就是下面的声明:
animal
some=new
tiger();
关于重写,遵循以下的规则:
(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。
(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。
(3)只有实例方法才能被重写,超类中的final方法不能被重写。
(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。
(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。
(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。
java的重载机制:
重载的实质:在一个类中使用签名相同的多个方法。
按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:
1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数。
2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。
重载的规则主要记住亮点:
一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。
二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。
注意下面的一种情况:(重写和重载的混合)
class
useanimal{
void
dostuff(animal
sa){}
void
dostuff(tiger
sa){}
public
static
void
main(string[]
args){
useanimal
ua=new
useanimal();
animal
an=new
tiger();
ua.stuff(an);
}
}
此时,调用的方法dostuff的animal版本,因为调用重载方法是在编译时决定的,an的声明类型是animal。所以调用animal版本。
始终注意一点:重载的判断始终是在编译时决定
❺ JAVA 如何把子类的参数传递给父类
这个题考察的是子类继承父类需要注意的地方,但是题出的很奇葩,你子类继承父类时,题目给定的方法
public YoshiIslandTaxCalculator() {
super(getTaxRate());
double taxRate = 0.07;
}
会报编译错误,原因是 显示调用构造器时不能引用一个类的实例域,
按照继承规则,子类的对象将可以使用到父类的方法,所以,父类中那些使用了构造器参数值的方法,其子类对象将可能访问到。因此,必须要确保父类构造器的参数可以被赋值。
“可以被赋值”有两种方式,
一是先实例化出对象,再通过setter赋值;
二是在实例化的时候就赋值,即通过构造器参数的形式传参。
你的题目中,父类没有提供默认的无参构造器。所以,方式一被封死。
而方式二在本例中,无法通过在实例化子类同时,同时为父类构造器变量赋值,编译器意识到了这个错误,因此会报编译错误。
/*
* 子类构造方法中必须通过super关键字调用父类的构造方法
* 构造子类之前必先构造父类,子类构造方法中第一句应有个默认的super方法
* 若子类没有写,则编译器自动加入对父类无参构造的调用;
* 若父类的默认构造方法有参数,则子类也应写super配参数,
* 或者在子类中重新定义super构造
* @param taxRate
*/
public YoshiIslandTaxCalculator(Double taxRate) {
super(taxRate);
}
❻ Java中参数类型是父类,但我用其子类作为参数传入没有错误,这是因为什么,求专业解答
父类对象强转为子类对象会丢失精度.你可以这样father
father
=
new
child();这就是父类引用指向子类对象
你可以理解为child是father,但是不能理解为father是child。
第二种情况,因为是object的.object只是定义了最基本的方法、属性。
所以强转的时候,你可以认为是user是object,object是user都行。因为所有类都是object的子类,强转后,不存在丢失精度.
❼ java中怎样把参数值传给子类的方法中
你是想说父类调用子类方法么?如果直接调用子类对象的方法也可以,但是会造成循环依赖等问题(并且该父类只能调用已知的子类),如非必要,尽量不要这样做。
还有一种方法比较安全,就是把被调用的方法设置为抽象方法,让子类继承。这样就不会循环依赖,也不会限定指定的子类。
PS:抽象方法在抽象类里可以是protected,但在接口里只能是public。
❽ JAVA中 子类与父类构造方法的关系 个人理解
编写JAVA作业时在继承的环节发现了一些错误,希望总结一些规律:(以下全部属于自己归纳,可能有问题)
一句话概括就是:子类一定会调用(不是继承)父类的构造方法!
即遵循一个原则:子类的构造一定是在父类已构造的基础上!
这句话要分为几种情况来理解(下面只讨论父类有构造函数):
子类构造函数自动调用super() (也可以手动加上)
但如果父类只有含参数的构造方法,那么子类必须申明一个构造方法,其中包含对super(args)的调用
一、父类含有无参构造函数
1、子类没有构造方法或者含有无参的构造方法:
这种情况,都会默认地调用super()
2、子类含有有参数构造方法:
同样会在首句默认调用super() //其实跟情况1类似
二、父类含有含参数的构造方法,不含无参数的构造方法:
子类没得选择:
子类必须申明一个构造方法(且含super的args),且方法里要首先调用super(args),否则报错。
三、父类含 含参数的构造方法和无参的构造方法:
此时子类可以选择性调用:
可以无构造方法:仍会默认调用super()
也可以有构造方法:其中会默认地调用super(),你也可以在开头加上这句,如果你不希望调用父类默认的无参方法,那么在 子类构造方法 中调用 父类含参构造方法。
上述看似情况复杂,其实基于其原则理解并不难。
综上:java为了保持 子类的构造基于父类的构造 这一原则,子类构造时必须通过某些方式首先调用父类的构造方法,否则会报错。
❾ Java抽象类中的抽象方法的参数对应的子类的方法的参数必须一致吗
同学你这个涉及了两个概念。
一个是抽象方法,一个是方法重载。
先说下概念:
抽象方法就是abstract描述的方法,它本身不含实现,必须由子类实现。
方法重载则是同一个方法名,但是参数类型或者参数个数不同。
理解了这个再看看你的问题。
如果你的子类的“对应的方法”有多个参数,那么,你这个子类的该方法就不是所谓的“对应的方法”了,它是这个方法的重载。
所以,在这种情况下,子类还是必须实现一个和原抽象方法一致的方法。
即是说,“Java抽象类中的抽象方法的参数对应的子类的方法的参数必须一致”