给定一个简单的类层次结构,其中每个类都是从抽象基类派生的.每个派生类都需要以某种方式提供一个枚举"值",基类将在某些基本方法中使用.
例如
基类:
public abstract class AbstractFoo
{
bool SaveFoo()
{
switch (BarType){...}
}
}
Run Code Online (Sandbox Code Playgroud)
和派生类
public class BananaFoo:AbstractFoo
{
//barttype = fruit;
}
public class WhaleFoo:AbstractFoo
{
//barttype = mammal;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过多种方法确保从AbstractFoo派生的所有类实现属性"enum BarType"
public abstract BarType BarType{get;}
Run Code Online (Sandbox Code Playgroud)
在每个派生类中,我可以实现BarType以返回正确的类型,或者添加一个抽象方法来执行非常类似的操作.
public BarType BarType{get{return _bartype;}}
Run Code Online (Sandbox Code Playgroud)
或者添加一个具体的方法来返回一个字段 - 然后我需要记住添加字段,但是输入的次数要少得多(C&P)?
建议的方法是什么?
我有一个方法
exampleMethod(Map<String, Number> exMap).
Run Code Online (Sandbox Code Playgroud)
我可以使用Number的子类(如Integer或Long)调用此方法吗?所以方法类就是
A a = new A();
a.exampleMethod(Map<"String, Integer"> intMap);
Run Code Online (Sandbox Code Playgroud)
谢谢
我创建了一个扩展类Asynctask.从多个活动中调用此类.它从网页获取一些数据.之后,根据url,数据将在onPostExecute方法中处理.现在我使用多个else if语句,但它有点不方便.
有没有办法onPostExecute在创建新的Activity的Activity中定义方法Asynctask.
我认为它可能适用于接口或抽象方法,但我不确定,也不知道如何.
我创建了一个抽象类,如下所示:
abstract class Chance
{
public void setTeams(SportEvent aSportEvent)
{
firstTeam = aSportEvent.getFirstTeam();
secondTeam = aSportEvent.getSecondTeam();
}
private int totalPlayedGames()
{
int playedAtHome = firstTeam.getHomePlayedGames();
int playedAway = secondTeam.getAwayPlayedGames();
int playedGames = playedAtHome + playedAway;
return playedGames;
}
private int totalScoredGoals()
{
int homeScoredGoals = firstTeam.getHomeScoredGoals();
int awayScoredGoals = secondTeam.getAwayScoredGoals();
int scoredGoals = homeScoredGoals + awayScoredGoals;
return scoredGoals;
}
abstract double getChance()
Team firstTeam;
Team secondTeam;
}
Run Code Online (Sandbox Code Playgroud)
然后,当然,我有几个类的方法getChance()...
现在,我想创建一个类,在其中我可以获得getChance()这些新类的结果.我想用的东西是这样的:
Class aClass = Class.forName(chanceClass....);
Object obj = …Run Code Online (Sandbox Code Playgroud) 我在覆盖从TimerTask类运行的方法时遇到问题.
这是我的代码:
public class PGameCore
{
Toolkit toolKit;
Timer timer;
public PGameCore(int clockIntervalInSeconds)
{
timer = new Timer();
timer.schedule(new CoreTimer(), 1000 * clockIntervalInSeconds);
}
class CoreTimer extends TimerTask
{
public void Run()
{
System.out.println("BEEEP :)");
toolKit.beep();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于:
class CoreTimer extends TimerTask
Run Code Online (Sandbox Code Playgroud)
我正在使用Netbeans.它说:"PGameCore.CoreTimer不是抽象的,不会覆盖TimerTask中的抽象方法run()."
我有一个抽象类:
abstract class Shape {
public String color;
public Shape() {
}
public void setColor(String c) {
color = c;
}
public String getColor() {
return color;
}
public double area() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个提供非抽象方法然后我想初始化它像:
Shape object = new Shape();
Run Code Online (Sandbox Code Playgroud)
所以在初始化时,它仍然给我一个错误,但为什么呢?如果我在类中提供一个抽象方法,那么可以理解该类无法初始化.在这种情况下,为什么还会出错?任何帮助,将不胜感激
这就是我想要做的:
abstract class BaseAnimal;
class cat : BaseAnimal;
class dog : BaseAnimal;
var allAnimals = new list<BaseAnimal>();
foreach (var someVar in allVars)
{
var myAnimal = new BaseAnimal();
if (someVar == true)
{
myAnimal = new cat();
}
else
{
myAnimal = new dog();
}
/* do other things with myAnimal var */
allAnimals.add(myAnimal);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情,或者我将不得不在每个IF语句中初始化变量然后复制其他东西/把它放在一个函数中并调用它两次?
我在学习C#.我对抽象类有些担忧.抽象类不允许创建实例.为什么c#支持抽象类的构造函数.这里的主要目的是什么?
嗨,我想在Eclipse中执行此代码.
abstract class ShapeNew {
int length;
public abstract double area();
}
class Rect extends Shape{
Rect(int side){
this.length = side;
}
public double area(){
System.out.println("area of rectangle"+ length*length);
return length*length;
}
/**
* @param args
*/
public static class Area{
public static void main(String[] args) {
// TODO Auto-generated method stub
ShapeNew rect = new Rect(32);// I am unable to use this. The eclipse throws an error//
rect.area();
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我.为什么我无法将ShapeNew的引用分配给Rect的对象?我收到这个错误
Exception in thread "main" java.lang.Error: Unresolved compilation problem: …Run Code Online (Sandbox Code Playgroud) 私有构造函数不允许创建对象,例如这里是代码..
class emp
{
private emp()//private constructor
{
}
}
public class privateconstructor
{
public static void main(String[] args)
{
emp e = new emp();//throws Error as constructor not visible
}
}
Run Code Online (Sandbox Code Playgroud)
通过将类声明为抽象用户也可以防止创建对象.所以我的问题是为什么私有构造函数?
仅供参考:
虽然可以通过静态方法创建对象,例如..
class emp
{
private emp()//private constructor
{
}
static emp createInstance()//static method
{
return new emp();//returns an instance
}
void disp()
{
System.out.println("member function called");
}
}
public class privateconstructor
{
public static void main(String[] args)
{
emp e = emp.createInstance();//creating …Run Code Online (Sandbox Code Playgroud) abstract-class ×10
java ×7
c# ×3
android ×1
class ×1
constructor ×1
hashmap ×1
inheritance ×1
interface ×1
overriding ×1
static ×1