构造函数与类的继承

来源:互联网 发布:linux如何取得root权限 编辑:程序博客网 时间:2024/05/20 14:44

        构造方法也叫构造器或者构造函数。它的作用是创建对象,通过new关键字来调用。继承的概念很简单,就是子类继承父类,其作用是子类能够继承父类的非私有部分的属性和方法,可以简化代码量,提高代码的复用率。其中在使用构造方法和类的继承时,又牵扯到几个概念:

    1.方法的重载(overload):一个类中可以有多个同名的方法,方法的参数不同(数据类型和数量)

    2.方法的重写(override):子类可以重写父类的方法。

3.自动转型:子类对象可以转换成父类类型。

        在介绍了类的继承与构造方法的概念之后,好像还不能更好的理解,那么我们通过几个例子来帮助我们理解他们的概念及其一些特性。

1.创建一个学生类

         Public  class Student{

                   Private  String name;

                   //创建一个学习方法

                   Public  void study(){

                            System.out.println(“在学习”);

}

//创建一个玩耍方法

Public  void  play(){

         System.out.println(name+“在玩游戏”);

}

//创建一个有参数的构造函数(是一个构造函数)

Public  Student(String  stuName){

         name=stuName;

         //输出一句话,为了观察此构造函数是否被调用

         System.out.println(“一个有参数的构造函数创建对象”);

}

//创建一个无参数的构造函数

Public  Student(){}

}

2.创建一个高中生类,继承学生类

         Public  class MiddleStudent  extents  Student{

     /*高中生类继承了父类的学习方法,但又想对其内容进行一些修改时,就需要使用方法的重写来实现了*/

Public  void study(){

         System.out.println(“备战高考中。。。”);

}

}

3.创建一个大学生类,继承学生类

         Public  class UNStudent  extents  Student{

                   //方法的重写

                   Public  void study(){

                            System.out.println(“我是大学生,我有自己的学习方法”);

}

//大学生特有的方法

Public  void  cet4(){

         System.out.println(“考四级!”);

}

}

4.创建一个测试类,用来编译运行以上三个类

         Public  class Test{

                   //主方法,是一个程序的入口

                   Public  static void  main(String[]  args){

                           Student  stu0=new Student(“张三”);

                            //将大学生类,高中生类自动转型为学生类

                            Student  stu1=new UNStudent();

                            Student  stu2=new MiddleStudent();

/*学生对象调用学习方法和玩耍方法,调用同一个对象的同一个方法,观察运行结果的不同之处*/

                            stu1.study();

                            stu2.study();

                           stu0.play();

                            stu1.play();

                            stu2.play();

}

}

   编译运行Test得到如下结果

        

      从以上结果可以看出,stu0,stu1,stu2都是学生类型的对象,当stu1,stu2都调用sudy()方法时得到的结果分别是我是大学生,我有我的方法;备战高考中。。。并且从输出结果可以判断出stu1,stu2对象调用的学习方法是被重写后的方法;当stu0,stu1都调用play()方法时得到的结果分别是张三在玩游戏,null在玩游戏。

   在对代码进行分析,本来stu1是属于大学生类的对象,而stu2是属于高中生类的对象,现在两者都属于学生类对象,说明发生了类型的转换,再观察构造函数,可以发现其函数名和它的类同名,由此可以的出一下一些结论:

1.方法的重写:子类可以重写父类的方法,此时子类对象来调用此方法,则优先调用重写后的方法。

2.自动转型:子类对象可以自动转换成父类类型,此时只能调用父类中有的方法,如果该方法被子类重写,那么   优先调用被重写后的方法,可以用以下符号表示:

  A  extents  B

  B  b=new A();

3.强制转型:父类对象可以转换成之类类型,可以用以下符号表示:

  A  extents B

   B  b=new B();

 A  a=(A)b;

4.多态:同一类型的对象调用相同的方法,出现的结果不一定相同,出现多态的原因是类的继承与方法的重写。

5.构造方法(构造器/构造函数):作用是创建对象,该方法由new关键字来调用,

其特点是:

   (1)在Java中每个类都默认有一个无参数的构造方法(如果在此类中定义了其他的构造方法,则此默认方 法就失效)

   (2)构造方法的名称与类同名

    (3)构造方法不需要定义返回值

6.方法的重载:一个类中可以有多个同名的方法(构造方法就属于方法的重载),方法的参数不同(数据类型,             数量不同)

  此外,补充一点知识:

  接口(interface):它是一种特殊的类,接口中的方法都是抽象方法

  抽象方法:没有方法体的方法

  类的对象可以通过它的构造函数创建,而接口则不可以,接口创建对象主要有以下两种方式:

   Public  interface C{

                        Public  void doSomething();

}

       方式一:使用匿名内部类来创建

                        C  c=new C(){

                                     //实现C中的抽象方法

                                     Public void doSomething(){

         //加上方法体

}

};

         方式二:通过接口的实现类(子类)构造对象,在自动转型为接口类型即可

                   跟类与类的继承关系类似,类与接口的关系是实现关系(implements)

         实现(跟继承关系是同种意思):一个类去实现接口,必须将接口中所有的抽象方法实现。

         A类实现了C接口

         Public  class A  implements  C{

                            //实现C中的抽象方法

                           Public  void doSomething(){

                                               //加方法体

}

}

C a=new A();//自动转型为接口类型

    注:在Java中,一个类可以同时实现多个接口,而在类与类的继承关系中,一个子类只能有一个父类,即单根继  承!

1 0
原创粉丝点击