Java 继承 抽象类 接口

本文详细介绍了Java中类的继承、抽象类和接口的概念及其使用。首先,通过extends关键字实现类的继承,讲解了子类如何调用父类的构造方法、成员变量和方法。接着,探讨了抽象类的特性,如抽象方法的定义和子类的实现要求。此外,还介绍了Object类中的equals()、toString()和getClass()方法。最后,讲解了接口的定义、实现与引用,强调接口中的方法必须为抽象的,以及接口的继承允许多重继承。通过实例代码加深了理解。
摘要由CSDN通过智能技术生成
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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值