gpt4 book ai didi

Java:扩展内部类

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:07 25 4
gpt4 key购买 nike

我正在尝试了解 Java 中的扩展内部类。我已经四处阅读,但没有发现能完全回答我的问题。所以这里...

我有...

public class Pie{
protected Slice[] slices;

// Pie constructor
public Pie(int n){
sliceGenerator(n)
}

private void sliceGenerator(int n){
slices = new Slice[n];
final float sweepAngle = 360.0f/(float)n;
float startAngle = 0;
for (int i=0;i<n;i++){
slices[i] = new Slice(startAngle);
startAngle += sweepAngle;
}
}

@Override
public String toString(){
for (Slice s:slices){
s.toString();
}
}

// Inner class...
public class Slice{
public Slice(float startAngle){
//set some private fields based on startAngle and generic pie
}

@Override
public String toString(){
return **string based on private fields**
}
}
}

然后我扩展这个...

public class ApplePie extends Pie{
protected Slice[] slices;

// Apple Pie constructor
public ApplePie(int n){
super(n);
}

// Inner class...
public class Slice extends Pie.Slice{
public Slice(float startAngle){
super(startAngle);
//set some **additional** private fields based on startAngle **specific to apple pie** appleness or something
}

@Override
public String toString(){
return **string based on apple pie specific private fields**
}
}
}

现在,当我制作一个苹果派并调用它的 toString 方法时,就像这样...

ApplePie ap = new ApplePie(8);
System.out.println(ap.toString());

我没有得到关于苹果派切片的信息,但是关于馅饼切片的信息。它忽略了我的 toString 覆盖,或者更有可能忽略了我的苹果派 Slice。我如何安排它,使苹果派切片引用 ApplePie

非常感谢任何帮助!对不起,馅饼引用 - 这是我正在使用的实际类(class)......

最佳答案

我已经更改了您的代码以满足您的要求。

你的父类 Pie 即将创建一个新的 Slice 实例,但是子类 ApplePie 的 Slice 并没有覆盖 Slice 方法它的父类(super class)'。

我添加了下面的函数,使子类能够创建自己的 Slice

protected void newSliceArray(int n) {
slices = new Slice[n];
}

protected Slice newSlice(float startAngle) {
return new Slice(startAngle);
}

派.java:

public class Pie {
private int a = 1;
protected Slice[] slices;

// Pie constructor
public Pie(int n) {
sliceGenerator(n);
}

private void sliceGenerator(int n) {
newSliceArray(n);
final float sweepAngle = 360.0f / n;
float startAngle = 0;
for (int i = 0; i < n; i++) {
slices[i] = newSlice(startAngle);
startAngle += sweepAngle;
}
}

protected void newSliceArray(int n) {
slices = new Slice[n];
}


protected Slice newSlice(float startAngle) {
return new Slice(startAngle);
}

@Override
public String toString() {
String t = "";
for (Slice s : slices) {
t += s.toString();
}
return t;
}

// Inner class...
public class Slice {
public Slice(float startAngle) {
// set some private fields based on startAngle and generic pie
}

@Override
public String toString() {
return "" + a;
}
}
}

苹果派.java:

public class ApplePie extends Pie {
private int b = 2;

// protected Slice[] slices;

// Apple Pie constructor
public ApplePie(int n) {
super(n);
}

protected void newSliceArray(int n) {
slices = new Slice[n];
}

protected Slice newSlice(float startAngle) {
return new Slice(startAngle);
}

// Inner class...
public class Slice extends Pie.Slice {
public Slice(float startAngle) {
super(startAngle);
// set some **additional** private fields based on startAngle **specific to apple pie**
// appleness or something
}

@Override
public String toString() {
return b + "";
}
}
}

测试:

public static void main(String[] args) {
ApplePie ap = new ApplePie(8);
System.out.println(ap.toString());
}

代码将打印22222222

关于Java:扩展内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534421/

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