JAVA继承 抽象类 接口
作者: 嗯呢
一.类的继承
通过继承可以实现代码的复用,被继承的类称为父类或超类(superclass),由继承而得到的类称为子类(subclass)。一个父类可以拥有多个子类,但一个类只能有一个直接父类,这是因为JAVA语言中不支多重继承。
子类继承父类的成员变量和成员方法,同时可以修改父类的成员变量或重写父类的方法,还可以添加新的成员变量或成员方法。
JAVA语言中有一个名为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。
1.子类的创建
类的继承是通过extends关键字来实现的,在定义类时若使用ectends关键字指出新定义类的父类,就是在两个类之间建立了继承关系。新定义的类称为子类,它可以从父类那里继承所有非private的成员作为自己的成员。
子类的创建:
* 格式: class SubClass extends SuperClass //SubClass为子类,SuperClass为父类
* {
* .
* .
* .
* }
2.调用父类中特定的构造方法
在没有明确地指定构造方法时,子类还是会先调用父类中没有参数的构造方法,以便进行初始化的操作。在子类的构造方法中可以通过super()来调用父类特定的构造方法。
例://以Person作为父类,创建学生子类Student,并在子类中调用父类里某指定的构造方法。
class Person2
{
private String name;
private int age;
publicPerson2()//定义Person2类的无参构造方法
{
System.out.println("调用了Person2类的无参构造方法");
}
publicPerson2(String name,int age)//定义Person2类的有参构造方法
{
System.out.println("调用了Person2类的有参构造方法");
this.name=name;
this.age=age;
}
publicvoid show()
{
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
class Student2extends Person2//定义继承自Person2类的子类Student2
{
privateString department;
publicStudent2()//定义Student2类的无参构造方法
{
System.out.println("调用了学生类的无参构造方法Student2()");
}
publicStudent2(String name,int age,String dep)//定义Student2类的有参构造方法
{
super(name,age);//调用父类的无参构造方法
department=dep;
System.out.println("我是"+department+"学生");
System.out.println("调用了学生类的有参构造方法Student2(Stringname,int age,String dep)");
}
}
public class App8_2 {
publicstatic void main(String[] args)
{
Student2stu1=new Student2();//创建对象,并调用无参构造方法
Student2stu2=new Student2("李小四",23,"信息系");//创建对象并调用有参构造方法
stu1.show();
stu2.show();
}
}
/*在子类中访问你类的构造方法,其格式为super(参数列表)。
* super()可以重载,也就是说,super()会根据参数的个数与类型,执行父类相应的构造方法。
* 调用父类构造方法的super()语句必须写在子类构造方法的第一行。
*super()与this()的功能相似,但super()是从子类的构造方法调用父类的构造方法, 而this()则是在同一个类内调用其他的构造方法。
*super()与this()均必须放在构造方法内的第一行,也就是这个原因,super()与this()无法同时存在同一个构造方法内。
* 与this关键字一样,super指的也是对象,所以super同样不能在static环境中使用,包括静态方法和静态初始化器(static语句块)。
3.在子类中访问父类的成员
例://在学生子类Student中访问父类Person的成员。用protected修饰符和super关键字访问父类的成员
class Person3
{
protectedString name;//用protected(保护成员)修饰符修饰
protectedint age;
publicPerson3()//定义Person3类的“不做事”的无参构造方法
{
}
publicPerson3(String name,int age)//定义Person3类的有参构造方法
{
this.name=name;
this.age=age;
}
protectedvoid show()
{
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
class Student3 extends Person3//定义子类Student3,其父类为Person3
{
privateString department;
intage=20;//新添加了一个与父类的成员变量age同名的成员变量
publicStudent3(String xm,String dep)//定义Student3类的有参构造方法
{
name=xm; //在子类里直接访问父类的protected成员name
department=dep;
super.age=25; //利用super关键字将父类的成员变量age赋值为25
System.out.println("子类Student3中的成员变量age="+age);
Java 继承 抽象类 接口
最新推荐文章于 2023-07-28 17:14:42 发布
本文详细介绍了Java中类的继承、抽象类和接口的概念及其使用。首先,通过extends关键字实现类的继承,讲解了子类如何调用父类的构造方法、成员变量和方法。接着,探讨了抽象类的特性,如抽象方法的定义和子类的实现要求。此外,还介绍了Object类中的equals()、toString()和getClass()方法。最后,讲解了接口的定义、实现与引用,强调接口中的方法必须为抽象的,以及接口的继承允许多重继承。通过实例代码加深了理解。
摘要由CSDN通过智能技术生成