Jon*_*Jon 7 java inheritance extends class
我试图理解在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**
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我扩展这个......
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**
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我制作一个Apple派并调用其toString方法时,就像这样......
ApplePie ap = new ApplePie(8);
System.out.println(ap.toString());
Run Code Online (Sandbox Code Playgroud)
我没有获得有关苹果派切片的信息,但有关馅饼切片的信息.它忽略了我的toString覆盖,或者更可能忽略了我的苹果派Slice.如何安排苹果派切片参考ApplePie?
任何帮助非常感谢!对不起馅饼参考 - 这是我正在使用的实际课程......
我已经更改了您的代码以满足您的要求。
您的超类Pie即将创建 的新实例Slice,但子类 ApplePie 的 Slice 不会覆盖Slice其超类的方法。
我添加了下面的函数以使子类能够创建自己的Slice.
protected void newSliceArray(int n) {
slices = new Slice[n];
}
protected Slice newSlice(float startAngle) {
return new Slice(startAngle);
}
Run Code Online (Sandbox Code Playgroud)
馅饼.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
苹果派.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 + "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试:
public static void main(String[] args) {
ApplePie ap = new ApplePie(8);
System.out.println(ap.toString());
}
Run Code Online (Sandbox Code Playgroud)
代码将打印 22222222
| 归档时间: |
|
| 查看次数: |
14384 次 |
| 最近记录: |