讨论下列程序有什么错误? public class MyMain{ IamAbstract ia = new IamAbstract(); } abstract class IamAbstract{ IamAbstract(){}
时间: 2023-11-27 07:54:25 浏览: 34
这段程序有以下错误:
1. 抽象类 `IamAbstract` 不能被实例化,因此 `IamAbstract ia = new IamAbstract();` 这行代码会导致编译错误。
2. 抽象类 `IamAbstract` 没有定义任何抽象方法,因此该类的存在没有意义。
要修复这些错误,可以将 `IamAbstract` 中的无参构造函数去掉,或者在其中定义至少一个抽象方法。同时,在 `MyMain` 类中也需要修改为实例化 `IamAbstract` 的子类对象。例如:
```
public class MyMain {
IamAbstract ia = new SubClass();
}
abstract class IamAbstract {
public abstract void doSomething();
}
class SubClass extends IamAbstract {
public void doSomething() {
System.out.println("I'm doing something");
}
}
```
相关问题
编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。然后定义一个从MyClass类继承的类MyMain,将Main方法放在MyMain中,在Main方法中创建MyClass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。
好的,我理解了你的问题。以下是代码示例:
```csharp
using System;
public class MyClass
{
public int publicData;
private int privateData;
protected int protectedData;
public void PublicMethod()
{
Console.WriteLine("This is a public method.");
}
private void PrivateMethod()
{
Console.WriteLine("This is a private method.");
}
protected void ProtectedMethod()
{
Console.WriteLine("This is a protected method.");
}
}
public class MyMain : MyClass
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
// Accessing public data member and method
myClass.publicData = 10;
Console.WriteLine("Public data member: " + myClass.publicData);
myClass.PublicMethod();
// Accessing private data member and method
// The following statements will produce compilation errors
// myClass.privateData = 20;
// Console.WriteLine("Private data member: " + myClass.privateData);
// myClass.PrivateMethod();
// Accessing protected data member and method
// The following statements will produce compilation errors
// myClass.protectedData = 30;
// Console.WriteLine("Protected data member: " + myClass.protectedData);
// myClass.ProtectedMethod();
// Accessing protected data member and method through inheritance
MyMain myMain = new MyMain();
myMain.protectedData = 30;
Console.WriteLine("Protected data member (through inheritance): " + myMain.protectedData);
myMain.ProtectedMethod();
}
}
```
以上代码定义了一个名为 `MyClass` 的类,包含了一个公有数据成员 `publicData`、一个私有数据成员 `privateData`、一个受保护数据成员 `protectedData`,以及一个公有方法 `PublicMethod`、一个私有方法 `PrivateMethod`、一个受保护方法 `ProtectedMethod`。
然后定义了一个从 `MyClass` 类继承的类 `MyMain`,将 `Main` 方法放在 `MyMain` 中。在 `Main` 方法中创建了 `MyClass` 类的一个对象,并分别访问了类中的数据成员及方法。
在这个例子中,下面的语句会产生编译错误:
```csharp
myClass.privateData = 20;
Console.WriteLine("Private data member: " + myClass.privateData);
myClass.PrivateMethod();
myClass.protectedData = 30;
Console.WriteLine("Protected data member: " + myClass.protectedData);
myClass.ProtectedMethod();
```
因为 `privateData` 是私有的,只能在类内部访问,而 `ProtectedData` 是受保护的,只能在类内部和子类中访问。我们可以通过从 `MyClass` 类继承的 `MyMain` 类来访问受保护的数据成员和方法。
优化一下java import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class sumitup extends JFrame implements ActionListener{ JTextField rValue = new JTextField(8); JTextField lValue = new JTextField(8); JTextField result = new JTextField(8); JButton calcul = new JButton("Check"); sumitup() { /*布局设计*/ setTitle("Welcome to sum it up"); setLayout(null); setBounds(200, 100, 1200, 800); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel myTitle = new JPanel(); myTitle.add(new JLabel("Enter two operands,result and click on 'Check'")); JPanel myText = new JPanel(); myText.add(rValue); myText.add(new JLabel(" + ")); myText.add(lValue); myText.add(new JLabel(" = ")); myText.add(result); Box myMain = Box.createVerticalBox(); Component strut1 = Box.createVerticalStrut(5); Component strut2 = Box.createVerticalStrut(30); myMain.add(strut1); myMain.add(myTitle); myMain.add(myText); myMain.add(strut2); myMain.setBounds(360, 600, 300, 100); add(myMain); calcul.setBounds(450, 700, 100, 50); add(calcul);
可以采用以下方式优化代码:
1. 不建议使用 null 布局。可以使用其他布局管理器,如 BorderLayout、GridLayout、GridBagLayout 等,以便更好地控制组件的位置和大小。
2. 尽量避免使用通配符导入,因为这会增加代码的混淆度和可读性。可以手动导入需要的类,或者使用 IDE 的自动导入功能。
3. 可以将一些常用的类或方法封装在单独的类中,以便于重用和维护。
4. 可以将一些重复的代码块抽象成方法,以便于复用和减少代码冗余。
5. 可以添加异常处理机制,以防止程序出现异常而崩溃。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)