gpt4 book ai didi

java - 如何要求子类具有可以使用父类(super class)方法检索的已定义变量?

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:28 25 4
gpt4 key购买 nike

我正在尝试为其他人创建简化的编程体验,以扩展我正在开发的应用程序的类结构。我目前是一名实习生,但我工作的公司希望最终的应用程序能够轻松添加小更新(不需要完全重新雇用的简单添加。这并不是说他们不想再次雇用我。)

我有一个抽象类:

abstract class ProductEntry {
protected String title;
protected String subtitle;
protected int[] imageArray;
protected String downloadLink;
protected String description;

public ProductEntry() {

}

/*
~Getters and Setters~
*/
}

这是一个扩展它的示例类:

public class GenericEntry extends ProductEntry {
private String newTitle = "This Title";
private String newSubtitle = "That Subtitle";
private int[] newImageArray = new int[]{R.drawable.picture1, R.drawable.picture2};
private String newDownloadLink = "www.google.com";
private String newDescription = "This is where my description would go, if I had one!";

public GenericEntry() {

}

@Override
public void setTitle(String title) {
super.setTitle(newTitle);
}

@Override
public void setDownloadLink(String downloadLink) {
super.setDownloadLink(newDownloadLink);
}

@Override
public void setImageArray(int[] imageArray) {
super.setImageArray(newImageArray);
}

@Override
public void setSubtitle(String subtitle) {
super.setSubtitle(newSubtitle);
}

@Override
public void setDescription(String description) {
super.setDescription(newDescription);
}
}

我这样做是因为我想对我的应用程序进行编程,将所有子类放入一个数组中:

ProductEntry allEntries = new ProductEntry[numOfEntries]

然后,我将使用所有条目根据列表中的选择来填充通用布局。

TextView title = (TextView) findViewById(R.id.txtTitle);
title.setText(allEntries[position].getTitle());

// Repeat for subtitle and description's TextView,
// populate ImageViews with pictures from the imageArray,
// and update the URL link of a button.

我选择这样做的原因是,由于将来可能希望更新应用程序的人不是程序员,也不太懂技术,所以我可以向他们展示 GenericEntry,向他们展示如何复制类、更改类名,然后告诉他们替换变量。

这样,他们就不需要复制布局并被迫创建一个全新的 Activity 并将其分配给 ListView。我认为通常我会为每个条目创建一个“独特”(单独)布局,但由于他们希望稍后用新条目扩展它,我正在尝试创建一个后端,所以他们只需要基本上填空。

这也应该允许我轻松地在应用程序中填充有关其产品的信息。

问题是,我相信您可以看出,我正在尝试将变量传递给子类,而在 Java 中您无法做到这一点,因为这不是继承的工作原理。 (当我开始这样做时,我有一段时间没有接触过 Java,所以我没有立即意识到这个错误。)

我的问题是如何在保留其用途的同时改进该系统?

我应该尝试放弃抽象类吗?我是 Android 开发新手,所以我不确定是否有更好的方法将此类信息传递给 Activity 。

最佳答案

如果想要求子类提供信息,可以使用构造函数(在抽象类中):

abstract class ProductEntry {
protected String title;
protected String subtitle;
protected int[] imageArray;
protected String downloadLink;
protected String description;

ProductEntry(String title, String subtitle, int[] imageArray, String downloadLink, String description) {
this.title = title;
this.subtitle = subtitle;
this.imageArray = imageArray;
this.downloadLink = downloadLink;
this.description = description;
}

/*
* ~Getters and Setters~
*/
}

这会强制子类提供信息,如下所示:

public class GenericEntry extends ProductEntry {
private static String newTitle = "This Title";
private static String newSubtitle = "That Subtitle";
private static int[] newImageArray = new int[]{R.drawable.picture1, R.drawable.picture2};
private static String newDownloadLink = "www.google.com";
private static String newDescription = "This is where my description would go, if I had one!";

public GenericEntry() {
super(newTitle, newSubtitle, newImageArray, newDownloadLink,newDescription);
}
}

关于java - 如何要求子类具有可以使用父类(super class)方法检索的已定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com