1 class Test1{ 2 private int i; 3 } 4 class Test2 extends Test1{ 5 int getInt() { 6 return i; 7 } 8 } 段落格式 字体 字号
时间: 2024-02-14 09:17:12 浏览: 11
这段代码定义了两个类Test1和Test2,Test2继承了Test1。Test1类中定义了一个私有的int类型变量i,在Test1类外部无法直接访问该变量。Test2类中定义了一个公共的getInt()方法,用于获取Test1类中私有变量i的值。由于Test2类继承了Test1类,因此可以在Test2类中访问Test1类中的私有变量i,但在Test2类外部仍然无法直接访问。
需要注意的是,在Test2类中,如果直接访问i变量会导致编译错误。因为i变量是私有的,不能在子类中直接访问。为了访问i变量,需要通过调用父类的方法来获取该变量的值。修改后的代码如下:
```
class Test1 {
private int i;
}
class Test2 extends Test1 {
int getInt() {
return super.i;
}
}
```
在Test2类中,通过使用super关键字来访问父类的私有变量i。这里将i变量改为了默认访问权限,使得其可以在子类中访问。
相关问题
public class Test extends Thread { private String sThreadName; public static void main(String[] args) { Test h = new Test(); h.go(); } Test() { } Test(String s) { sThreadName = s; } public String getThreadName() { return sThreadName; } public void go() { Test first = new Test("first"); first.start(); Test second = new Test("second"); second.start(); } public void start() { for (int i = 0; i < 2; i++) { System.out.println(getThreadName() + i); try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println(e.getMessage());
这段代码是一个继承自Thread类的多线程程序。在main方法中,创建了一个Test类的对象h,并调用了它的go()方法。在go()方法中,创建了两个Test类的对象first和second,并分别启动了它们的线程。在Test类的start()方法中,使用一个for循环来输出线程名和一个计数器i的值,并使用Thread.sleep()方法使线程休眠100毫秒。由于Test类继承自Thread类,因此它可以被启动为一个单独的线程,并且可以使用start()方法来启动它的线程。在本例中,由于Test类没有重写run()方法,因此默认使用Thread类的run()方法来执行线程。在run()方法中,会执行在start()方法中定义的for循环,因此会输出线程名和计数器的值。由于启动了两个Test类的对象,因此会有两个线程同时执行,并且会交替输出它们的线程名和计数器的值。
public class Test extends Thread { private String sThreadName; public static void main(String argv[]) { Test h = new Test(); h.go(); } Test() { } Test(String s) { sThreadName = s; } public String getThreadName() { return sThreadName; } public void go() { Test first = new Test("first"); first.start(); Test second = new Test("second"); second.start(); } public void start() { for (int i = 0; i < 2; i++) { System.out.println(getThreadName() + i); try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } } }
这段代码定义了一个名为 Test 的类,继承自 Thread 类。在 main 方法中,创建了一个 Test 类的实例 h,并调用了它的 go 方法。在 go 方法中,又创建了两个 Test 类的实例 first 和 second,并分别调用它们的 start 方法,启动了两个新的线程。
在 Test 类中,重写了 start 方法,在其中使用了 for 循环打印当前线程的名称和一个递增的数字。每次打印完后,线程暂停 100 毫秒。由于创建了两个 Test 类的实例,因此总共会启动两个线程,每个线程都会打印两次输出。
需要注意的是,由于每个线程的 start 方法中都会调用 Test 类的 start 方法,因此实际上是在创建了一个新的线程后,再调用了这个新线程的 start 方法。因此,每个线程的名称都是在新线程中生成的,而不是在构造函数中指定的。在本例中,由于重写了 start 方法,并没有调用 Thread 类的 start 方法,因此线程不会并发执行,而是按顺序依次执行。因此,最终的输出结果是:
first0
first1
second0
second1