Tag: inheritance

Java:inheritance的类构造函数正在调用Super类

在创建java程序时我遇到了问题, 子类构造函数通过调用Superclass的方法抛出Error 代码类似于: class Manage { public static void main(String[] args) { Manager m1 = new Manager ( 35 ); } } class Employee { int emp_id; public Employee(int id) { this.emp_id = id; } public int get_id() { return emp_id; } } class Manager extends Employee { public Manager(int id ) { this.emp_id = […]

Java枚举扩展了变通方法

有没有比这更好的“解决方法”? 我想在访问TableMap上的方法时避免使用PREFIX(local var)。 public class TableMap extends TreeMap { public String field1, field2, field3; public TableMap(Tables table){} public void method(){} public void method2(){} public void method3(){} … } 解决方法! public enum Tables { table1, table2, table3; public final TableMap MAP=new TableMap(this); private Tables(){} } 需要! public enum Tables extends TableMap { table1, table2, table3; public […]

java – 在重写方法中检查’throws’的exception

我正在实践exception处理机制,方法覆盖java …我的代码如下: class base { void show() { System.out.println(“in base class method”); } } class derived extends base { void show() throws IOException { System.out.println(“in derived class method”); throw new IOException(); } } class my { public static void main(String[] args) { try { base b = new derived(); b.show(); } catch (IOException e) { […]

Java语言中的inheritance

我们说java遵循单个inheritance模型,即Java类最多只能扩展一个类。 然后说每个java类都是从Object类inheritance的。 假设有两个类A和B.A和B都从Object扩展。 现在假设A扩展B.是否意味着A具有多重inheritance(A是从B和Class对象inheritance)?

我怎样才能贬低到class级’E型或至少在没有警告的情况下安全地进行?

我有超级抽象类Node和50种子类SubNode。 我有一个通用的Class ,它有一个私有var List 和一个方法,不幸的是它必须接受超类Node ALWAYS,不能将它移动到E: public void addSubElement (Node node){ if (node instanceOf E) subElements.add((E)node); else //Doing extra steps for occasional non-E nodes like discarding them silently without CastException; } 任何解决方案(Reflection?)能够在没有警告的情况下编译,抛出CastException而不是因为类型擦除而添加任何对象?? … 我不想为任何类型的子类编写相同的函数: public void addSubElement (Node node){ if (node instanceOf SubNode1) subElements.add((SubNode1)node); if (node instanceOf SubNode2) subElements.add((SubNode2)node); //if (node instanceOf SubNode50…. } 有一个像这样的方法会很好。 […]

覆盖静态方法和最终方法

我知道在Java中 , static方法不能被子类覆盖。 两个问题: 那是为什么? 有人能解释一下里面的原因吗? 2.子类可以覆盖超类中的final方法吗?

编译时和运行时的Downcasting / Upcasting错误?

请检查以下程序。 我怀疑编译器何时会在编译器级别发出转换exception以及什么时候它将在runtime ? 喜欢下面的程序,表达 我假设(Redwood) new Tree()应该在编译时失败,因为Tree不是Redwood。 但它在compile time没有失败,正如预期的那样,它在runtime失败了! public class Redwood extends Tree { public static void main(String[] args) { new Redwood().go(); } void go() { go2(new Tree(), new Redwood()); go2((Redwood) new Tree(), new Redwood()); } void go2(Tree t1, Redwood r1) { Redwood r2 = (Redwood)t1; Tree t2 = (Tree)r1; } } class Tree […]

了解类变量的inheritance

我正在用Java构建Challenge24Solver类。 逻辑本身工作并找到预期的解决方案(具有任意数量的参数)。 无论如何,这部分项目是按照我的预期运作的。 问题来自解决方案表示的问题。 可以公平地说,我已经用Python完成了这个项目并且决定尝试用Java作为一种介绍,这可能是问题,我也试图像Python那样做。 以下是我的一些课程: abstract class Operation { \\ Basic operation class static String token; abstract public double operate (double x, double y); } class AddOp extends Operation { static String token = “+”; public double operate (double x, double y) { return x+y; } } //other operation classes SubOp, MulOp, DivOp class […]

如何在签名中使用generics正确覆盖抽象方法

我以为我明白了怎么做但我得到了一些意想不到的行为所以显然我错过了一些东西。 这是问题归结起来的。 基类: public abstract class Base { abstract public void foo(List l); } 派生类: public class Derived extends Base { @Override public void foo(List l) { return; } } Base类符合要求,但是当我编译Derived类时,我得到: Derived.java:3:Derived不是抽象的,不会覆盖Base中的抽象方法foo(java.util.List) 公共类Derived扩展Base ^ Derived.java:5:方法不会覆盖或实现超类型的方法 @Override ^ 2个错误 参数List的generics List似乎是问题的原因。 如果我用基本类型int替换两个签名中的那个部分,它就可以了。 谁能告诉我这里发生了什么?

尝试在位于其他包的子类中使用受保护的构造函数时,Eclipse显示错误

Hello Stackoverflow社区: – ] 我是新成员,首先我要感谢您提供的非常有用的建议和更正。 因为我是法国人,如果我的英语不完美,请原谅我。 这是我的问题:我正在学习Java编程语言,我想测试一些inheritance的东西。 如果我理解正确,声明为protected的字段可以由与声明受保护字段的类位于同一个包中的类以及它的所有子类访问,无论它们是否在同一个包中。 所以,我做了这4个类来测试这个。 我有一个名为“package1”的包,包含类A和C.我还有一个名为“package 2”的包,其中包含类A2和C,其中A2扩展为A.两个C类具有完全相同的代码,只是包中的它们位于变化。它们不会延伸A. 在A类中,我声明了一些具有不同访问属性的成员,尤其是使用protected visibility声明的构造函数。 这是四个类的代码。 package1,A类: package package1; public class A { public int a; protected int b; private int c; int d; protected static int h = 30; protected void aff(){ System.out.println(h); } protected A(){ a = 1; b = 2; c = 3; d […]