我想知道为什么第三个输出不是b.
这是我的代码:
public class SimpleTests {
public void func(A a) {
System.out.println("Hi A");
}
public void func(B b) {
System.out.println("Hi B");
}
public static void main(String[] args) {
A a = new A();
B b = new B();
A c = new B();
SimpleTests i = new SimpleTests();
i.func(a);
i.func(b);
i.func(c);
}
}
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Hi A
Hi B
Hi A
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么第三个输出是Hi A,不是Hi B.因为真实的c是B的一个实例.
我理解OOP范例中的抽象类是什么.是的抽象类是不完整的类型,无法实例化.
抽象类的子类可以扩展超类等,并通过使用基类型变量调用方法.但这是我没有得到的.
我正在读这本书,作者说使用Superclass变量来引用子类并调用一个公共方法调用正确的方法.是的,这是真的.例如我写的这个小代码:
public class ObjectOne extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectOne\n" ;
}
}
public class ObjectTwo extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectTwo\n" ;
}
}
public class ObjectThree extends SuperObject {
public String objectString()
{
return "objectString() of class ObjectThree\n" ;
}
}
public class SuperObject {
public String objectString()
{
return "SuperObject" ;
}
}
import static java.lang.System.out ;
public class ControlClass { …Run Code Online (Sandbox Code Playgroud) 我正在创建一个供人们使用的库,但为什么我的方法应该返回List而不是ArrayList?
因为如果用户知道真实类型是一个ArrayList,他将在循环中使用accessor []而不是迭代器,但如果他不知道他将使用迭代器.
对于LinkedList的相同问题,如果返回类型是List,则他将无法使用正确的访问者.
我对吗?
有没有办法ArrayList用double类型定义?我试过了两个
ArrayList list = new ArrayList<Double>(1.38, 2.56, 4.3);
Run Code Online (Sandbox Code Playgroud)
和
ArrayList list = new ArrayList<double>(1.38, 2.56, 4.3);
Run Code Online (Sandbox Code Playgroud)
第一个代码显示构造函数ArrayList<Double>(double, double, double)未定义,第二个代码显示后面需要维度double.
在我正在研究的项目中,我注意到每个实体类都有一个接口.似乎最初的动机是仅将接口暴露给其他项目/解决方案.
我发现这完全没用,我没有看到为每个类创建一个接口的重点.顺便说一下,这些类没有任何方法只是属性,并且它们没有实现相同的接口.
我错了吗?或者这是一个好习惯?
谢谢
可能重复:
"编程到接口"是什么意思?
接口与抽象类(通用OO)
我是新手学习JAVA,现在我对界面感到困惑.我搜索并阅读了很多材料,但仍然不清楚.
当我试图找到有关接口的一些信息时,我看到许多人谈到了接口和抽象类之间的关系.但我甚至不知道为什么他们会对比这两者.因为我认为抽象类用于告诉其他人你无法创建这个抽象类的对象,如果需要,你必须修改抽象类.这是关于继承的事情,对吧?
但我不知道界面的含义.有一个interface a,如果class B要实现接口a,它必须使用保留字class B implements a,然后完成接口所需的所有方法.但我的问题是,如果B类必须自己完成所有方法,接口的含义是什么?我想我们不需要它.我不太了解它.我读了很多句子:"界面可以反映面向对象语言的核心思想","界面可以帮助使程序更容易"等等.但我无法理解其含义.
那么,有没有人可以向我展示一些让我们理解界面的例子?或者你可以告诉我一些有用的链接或清楚描述界面的书籍.我真的希望弄明白.谢谢!
Java SE 6.0 API表示values()方法java.util.HashMap返回一个Collection类型.JVM如何确定在运行时返回哪个集合.它是jvm特定的还是Java遵循的任何一般准则.我浏览了源代码,HashMap但无法得到线索.任何帮助都非常感谢,或者如果问题很蹩脚,请指出我为什么.谢谢.
我想了解设置父对象的用例的用例.示例:Dog类扩展了Animal类.(没有接口,请注意)我通常会像这样创建一个Dog的对象:
Dog obj = new Dog();
Run Code Online (Sandbox Code Playgroud)
现在,由于Dog是Animal的一个子类,因此它已经可以访问Animal的所有方法和变量.那么,这有什么不同:
Animal obj = new Dog();
Run Code Online (Sandbox Code Playgroud)
请提供正确的用例及其使用的代码段.请不要有关于'多态性'或'编码接口'的理论文章!
码:
public class Polymorphism {
public static void main(String[] args){
Animal obj1 = new Dog();
Dog obj2 = new Dog();
obj1.shout(); //output is bark..
obj2.shout(); //output is bark..
}
}
class Animal{
public void shout(){
System.out.println("Parent animal's shout");
}
}
class Dog extends Animal{
public void shout(){
System.out.println("bark..");
}
}
class Lion extends Animal{
public void shout(){
System.out.println("roar..");
}
}
class Horse extends Animal{
public void shout(){ …Run Code Online (Sandbox Code Playgroud) 我已经学会了这两种模式但却不理解这两种模式之间的差异.
我不知道场景,何时何地使用这些模式.
任何人都可以解释差异和用例吗?
我无法弄清楚依赖性反转原理(SOLID原则之一)与通用"代码到接口"或分离接口模式之间的区别.他们都提倡创建一个抽象层来分离较低级别和较高级别的模块.
DI原则设想创建在更高层和更低层模块之间交互的接口,但也坚持接口必须是更高层包的一部分.
为什么这应该是更高层次而不是更低层次的一部分?它是暴露其行为的较低级别,所以解耦接口不应该是较低级别的一部分吗?如果有多个更高级别的模块取决于相同的较低级别怎么办?
或者,
为什么不制作一个单独的包来放置所有接口,然后可以被更高级别和更低级别使用?(这是分离接口模式设想的.)
我的困境是,我无法弄清楚它们的相对用途和好处.
请不要引用Derek Greer或Robert Martin的文章.我读过这些文章,但仍然存在混淆.
java ×9
interface ×3
arraylist ×1
c# ×1
double ×1
hashmap ×1
list ×1
oop ×1
optimization ×1
overloading ×1
polymorphism ×1