构造多个java源文件,里面包好自定义的类,接口,它们位于不同的包,可以存在继承关系,自己构造代码,测试验证package,import,访问控制的基本概念。
时间: 2024-03-21 08:40:52 浏览: 6
好的,下面是一个示例程序,包含了自定义的类、接口、不同包下的继承关系,以及package、import、访问控制的基本概念。
在项目目录下,我们创建以下的目录和文件:
```
src/
├── com/
│ ├── mypackage/
│ │ ├── Animal.java
│ │ └── Dog.java
│ ├── yourpackage/
│ │ ├── Cat.java
│ │ └── Pet.java
└── Main.java
```
其中,Animal和Dog类位于com.mypackage包下,Cat和Pet类位于com.yourpackage包下,Main类不属于任何包。
下面是每个类的代码实现:
Animal.java
```java
package com.mypackage;
public interface Animal {
void makeSound();
}
```
Dog.java
```java
package com.mypackage;
public class Dog implements Animal {
public void makeSound() {
System.out.println("Woof!");
}
}
```
Cat.java
```java
package com.yourpackage;
import com.mypackage.Animal;
public class Cat implements Animal {
public void makeSound() {
System.out.println("Meow!");
}
}
```
Pet.java
```java
package com.yourpackage;
public abstract class Pet {
protected String name;
public Pet(String name) {
this.name = name;
}
public abstract void play();
}
```
Main.java
```java
import com.mypackage.Animal;
import com.mypackage.Dog;
import com.yourpackage.Cat;
import com.yourpackage.Pet;
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound();
animal2.makeSound();
Pet pet = new Pet("Kitty") {
public void play() {
System.out.println(name + " is playing!");
}
};
pet.play();
}
}
```
在这个示例中,我们定义了Animal接口和Dog类,它们位于com.mypackage包下;还定义了Cat类和Pet抽象类,它们位于com.yourpackage包下。Main类不属于任何包。
通过package和import语句,我们可以引用不同包下的类和接口。在Main类中,我们创建了一个Animal类型的变量,但是它们分别指向了Dog和Cat的实例。这就是多态的体现,即一个变量可以指向不同的实例对象,并且可以调用相同的方法但是得到不同的结果。
在Pet类中,我们使用了访问控制关键字protected来限制name成员变量的访问权限,只有Pet类和它的子类才能访问这个变量。在Main类中,我们创建了一个Pet的匿名子类,并重写了play方法,来演示这个限制。
最后,我们通过调用makeSound和play方法来触发多态,并输出Dog和Cat的不同声音,以及Pet的play方法。