Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将父类放入扩展类中_Java_Spring - Fatal编程技术网

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之前声明变量更方便、更安全