package school;
创新互联公司是一家专注于成都网站制作、成都网站设计与策划设计,雁塔网站建设哪家好?创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:雁塔等地区。雁塔做网站价格咨询:18980820575
public class Test {
public static void main(String[] args) {
Student a = new Student1("小明", "我读的书是 java", "我是大一学生");
Student b = new Student1("小明", "我读的书是 马列主义", "我是大二学生");
Student c = new Student1("小明", "我读的书是 javaee", "我是大三学生");
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
/** 学生类 */
class Student {
private String name;
private String book;
private String type;
public Student(String name, String book, String type) {
this.name = name;
this.book = book;
this.type = type;
}
public String getName() {
return name;
}
public String getBook() {
return book;
}
public void setName(String name) {
this.name = name;
}
public void setBook(String book) {
this.book = book;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Student [name=" + name + ", book=" + book + ", type=" + type + "]";
}
}
/** 学生1 */
class Student1 extends Student {
public Student1(String name, String book, String type) {
super(name, book, type);
}
}
// /** 学生2 */
// class Student2 extends Student {
//
// public Student2(String name, String book) {
// super(name, book);
// }
//
// }
感觉没有类继承也能完成呢 不知道是不是这个意思 运行结果是
Student [name=小明, book=我读的书是 java, type=我是大一学生]
Student [name=小明, book=我读的书是 马列主义, type=我是大二学生]
Student [name=小明, book=我读的书是 javaee, type=我是大三学生]
我将程序分为了两个文件,一个文件存放Student类、Freshman类(大一学生)和,Sophomore类(大二学生),另一个类存放主调程序类Exos11,具体代码如下所示,首先是学生类:
class Student
{
public String name;
Student(String name)
{
this.name = name;
}
public void learnMarxism()
{
System.out.println(this.name + " learn Marxism");
}
}
class Freshman extends Student
{
Freshman(String name)
{
super(name);
}
public void learnJavaSE()
{
System.out.println(this.name + " learn JavaSE");
}
}
class Sophomore extends Student
{
Sophomore(String name)
{
super(name);
}
public void learnJavaEE()
{
System.out.println(this.name + " learn JavaEE");
}
}
然后是主调程序类:
public class Exos11
{
public void printInfo()
{
Freshman fr = new Freshman("Jack");
Sophomore so = new Sophomore("Jane");
fr.learnMarxism();
so.learnMarxism();
fr.learnJavaSE();
so.learnJavaEE();
}
public static void main(String[] args)
{
Exos11 ex = new Exos11();
ex.printInfo();
}
}
以上就是我的答案,如有问题,欢迎追问。
java接口
什么是接口?
Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。
Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。
接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。
为什么使用接口?
两个类中的两个类似的功能,调用他们的类动态的决定一种实现,那他们提供一个抽象父类,子类分别实现父类所定义的方法。
问题的出现:Java是一种单继承的语言,一般情况下,哪个具体类可能已经有了一个超类,解决是给它的父类加父类,或者给它父类的父类加父类,只到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中所有类的修改。
接口是可插入性的保证。
在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法,这时候,这些子类具有了可插入性(并且可以用这个接口类型装载,传递实现了他的所有子类)。
我们关心的不是那一个具体的类,而是这个类是否实现了我们需要的接口。
接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。
类型
使用Java接口将软件单位与内部和外部耦合起来。使用Java接口不是具体的类进行变量的类型声明,方法的返还类型声明,参量的类型声明,以及数据类型的转换。
在理想的情况下,一个具体的Java类应当只实现Java接口和抽象Java类中声明的方法,而不应当给多余方法。
类型等级结构
Java接口(以及抽象类)一般用来作为一个类型的等级结构的起点。
如果一个类已经有了一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次要的超类型叫做混合类型。
Java接口常用方法
单方法接口
以下是引用片段:
public interface Actionlistener() {
public abstract void actionPerformed(ActionEvent event);
}
仅且只有一个方法,只有实现了这个接口(重写这个接口中的唯一一个方法),你才有资格去事件监听器列表里注册(参数为Actionlistener类型),当事件源变动时,自动调用这个唯一的actionPerformed方法.
标识接口
是没有任何方法和属性的接口。标识接口不对实现它的类有任何语意上的要求,它仅仅表明了实现它的类属于一个特定的类型(传递)。
不推荐过多的使用标识接口。
常量接口
用Java接口来声明一些常量,然后由实现这个接口的类使用这些常量(以前在做画板的时候这么干过)。建议不要模仿这种常量接口的做法。
Java语言类型安全问题
Java是强类型的语言。这意味着Java编译器会对代码进行检查,以确定没一次赋值,每一次方法的调用是符合类型的。如果有任何不相符合的情况,Java编译器就会给出错误。
类型检查是基于这样一个简单的事实:每一变量的声明都给这个变量一个类型;每一个方法包括构造器的声明都给这个方法的特征。这样一来,Java编译器可以对任何的表达式推断出一个明显类型,Java编译器可以基于明显类型对类型进行检查。
Java语言是类型安全的。这就是说,任何被Java编译器接受的合法的Java类保证是类型安全的。换言之,在程序运行期间,不会有任何类型的错误。一个Java程序根本不可能将一个本来属于一个类型的变量当作另一个类型处理,因此也就不会产生由此而引起的错误。
简单的说,Java语言依靠三种机制做到了类型安全:编译期间的类型检查,自动的存储管理,数组的边界检查。
Java对于多重继承是怎么实现的?
首先回答这个问题之前,我需要说明下什么是继承?什么是多重继承和单继承?java采用何种机制来实现多重继承:
1.1继承是面向对象编程的一种特性,是保留原有类功能的前提下拓展或改写部分功能,实现代码复用的方式.。
1.2单继承就是一个类只可以继承自一个父类,多继承是指一个类可以同时继承多个父类。
1.3java中使用的是单继承,也就是一个类有且只能有一个父类,java中可以使用接口实现来实现类似多继承的效果。
2.下面着重介绍Java中如何实现多继承:
如下是多重继承示例:
interface CanFight{
void fight();
}
interface CanSwim{
void swim();
}
interface CanFly{
void fly();
}
class ActionCharacter{
public void fight(){
System.out.println("I can fight!");
}
}
class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{
public void swim(){
System.out.println("I can swim!");
}
public void fly(){
System.out.println("I can fly!");
}
}
public class Adventure {
public static void t(CanFight x){x.fight();
}
public static void u(CanSwim x){x.swim();
}
public static void v(CanFly x){x.fly();
}
public static void w(ActionCharacter x){x.fight();
}
public static void main(String[] args){
Hero h=new Hero();
t(h);
u(h);
v(h);
w(h);
}
}
从这个实例中,不能看出Java对于多继承是如何实现的。
运行结果:
I can fight!
I can swim!
I can fly!
I can fight!
以上就是Java对于多继承是如何实现的说明