Java 将父类放入扩展类中
我对扩展类有问题 以下是课程:Java 将父类放入扩展类中,java,spring,Java,Spring,我对扩展类有问题 以下是课程: class A{ } class B extends A{ } 现在的问题是,我有一个方法返回一个,类似这样的: public A doSomthing(){ } public static void main(){ B b = new B(); b = doSomething(); } class B extends A{ public B(A a){ copy all the fields from A to B} } 现在我试着这
class A{
}
class B extends A{
}
现在的问题是,我有一个方法返回一个,类似这样的:
public A doSomthing(){
}
public static void main(){
B b = new B();
b = doSomething();
}
class B extends A{
public B(A a){
copy all the fields from A to B}
}
现在我试着这样做:
public A doSomthing(){
}
public static void main(){
B b = new B();
b = doSomething();
}
class B extends A{
public B(A a){
copy all the fields from A to B}
}
但它似乎不起作用。有没有办法解决这个问题
我唯一想到的是有这样的东西:
public A doSomthing(){
}
public static void main(){
B b = new B();
b = doSomething();
}
class B extends A{
public B(A a){
copy all the fields from A to B}
}
然后做:
A a = new A();
a = doSomthing();
B b = new B(a);
有更好的选择吗?您将对象
b
实例化为b
类型,而不是a
,因此多态性
在调用doSomthing
将对象
b
更改为类型A您将对象b
实例化为类型b
而不是A
,因此调用doSomthing
将对象b
更改为类型A您将对象b
实例化为类型b
而不是A
,因此调用doSomthing
将对象b
更改为类型A您将对象b
实例化为类型b
而不是A
,因此调用doSomthing
将对象b
更改为类型A
从根本上说,我认为您错过了赋值运算符的功能。本声明:
b = doSomething();
将b
的值更改为doSomething()
方法返回的值。它根本不依赖于b
的现有值。同样,当你有:
A a = new A();
a = doSomthing();
。。。写下以下内容更有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
现在,如果需要基于A
的实例创建B
的实例,那么编写以下代码可能很有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
或者只是:
B b = new B(doSomething());
。。。但您需要了解现有值何时使用,何时不使用
通常我发现,当我需要做这样的事情时,实际上使用组合比使用继承更好,B
应该引用现有的a
,而不是扩展a
。这当然是需要考虑的,但是没有具体的例子,我们不能肯定。 基本上,我认为你已经错过了赋值操作符所做的事情。本声明:
b = doSomething();
将b
的值更改为doSomething()
方法返回的值。它根本不依赖于b
的现有值。同样,当你有:
A a = new A();
a = doSomthing();
。。。写下以下内容更有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
现在,如果需要基于A
的实例创建B
的实例,那么编写以下代码可能很有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
或者只是:
B b = new B(doSomething());
。。。但您需要了解现有值何时使用,何时不使用
通常我发现,当我需要做这样的事情时,实际上使用组合比使用继承更好,B
应该引用现有的a
,而不是扩展a
。这当然是需要考虑的,但是没有具体的例子,我们不能肯定。 基本上,我认为你已经错过了赋值操作符所做的事情。本声明:
b = doSomething();
将b
的值更改为doSomething()
方法返回的值。它根本不依赖于b
的现有值。同样,当你有:
A a = new A();
a = doSomthing();
。。。写下以下内容更有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
现在,如果需要基于A
的实例创建B
的实例,那么编写以下代码可能很有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
或者只是:
B b = new B(doSomething());
。。。但您需要了解现有值何时使用,何时不使用
通常我发现,当我需要做这样的事情时,实际上使用组合比使用继承更好,B
应该引用现有的a
,而不是扩展a
。这当然是需要考虑的,但是没有具体的例子,我们不能肯定。 基本上,我认为你已经错过了赋值操作符所做的事情。本声明:
b = doSomething();
将b
的值更改为doSomething()
方法返回的值。它根本不依赖于b
的现有值。同样,当你有:
A a = new A();
a = doSomthing();
。。。写下以下内容更有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
现在,如果需要基于A
的实例创建B
的实例,那么编写以下代码可能很有意义:
A a = doSomething();
A a = doSomething();
B b = new B(a);
或者只是:
B b = new B(doSomething());
。。。但您需要了解现有值何时使用,何时不使用
通常我发现,当我需要做这样的事情时,实际上使用组合比使用继承更好,B
应该引用现有的a
,而不是扩展a
。这当然是要考虑的,但是没有具体的例子,我们不能肯定。< P> java没有多重继承()来强制方法签名。相反,这样做是有道理的
public static A doSomthing(){
A result = new A();
...
return result;
}
然后您可以使用:
A a = A.DoSomthing();
B b = (B)A.DoSomthing();
Java没有多重继承()来强制方法签名。相反,这样做是有道理的
public static A doSomthing(){
A result = new A();
...
return result;
}
然后您可以使用:
A a = A.DoSomthing();
B b = (B)A.DoSomthing();
Java没有多重继承()来强制方法签名。相反,这样做是有道理的
public static A doSomthing(){
A result = new A();
...
return result;
}
然后您可以使用:
A a = A.DoSomthing();
B b = (B)A.DoSomthing();
Java没有多重继承()来强制方法签名。相反,这样做是有道理的
public static A doSomthing(){
A result = new A();
...
return result;
}
然后您可以使用:
A a = A.DoSomthing();
B b = (B)A.DoSomthing();
我更喜欢我写的方式,在赋值之前声明变量更方便、更安全。特别是如果你只在if/try里面赋值……我更喜欢我写的方式,在ass之前声明变量更方便、更安全