Java—构造方法与继承的简介与使用

一、构造方法

  1.作用:构造方法主要用来实例化对象,在实例化对象的时候给成员变量赋值,并且所有的实例化对象,都会执行构造方法。

  2.分类:分为无参构造和有参构造。

  3.定义语法:

      访问修饰符 类名(参数列表){

      }

      例子:public Student(){

      }

  4.特点

    (1)构造方法的名称就是类名;

    (2)构造方法是没有返回值的,但可以使用return,用来结束构造方法;

    (3)构造方法不能调用自身,必须由jvm来进行调用;

  5.说明

    (1)如果一个类中不定义任何构造方法,系统会默认提供一个无参的构造方法;

    (2)若一个类中已经定义了构造方法,则系统不会再提供默认的无参构造方法;

    (3)构造方法可以重载;

    (4)一般在类中会定义一个无参构造函数和一个有参构造函数

  6.set方法与构造方法的区别

    (1)相同点:都可以用来给成员变量来进行赋值;

    (2)不同点:构造方法只能在实例化对象的时候给成员变量赋值;set方法是可以给成员变量进行多次赋值。

  7.案例:

  需求:(1)定义一个企鹅类,属性:名称、年龄、性别,方法:打印企鹅信息

     (2)使用键盘录入两个企鹅的信息,将企鹅存入到数组中,使用构造函数来进行赋值

     (3)打印企鹅的信息,用get方法获取属性

代码示例:

 1 import java.util.Scanner;
 2 
 3 //企鹅类
 4 class Penguin {
 5     //私有属性
 6     private String name;
 7     private int age;
 8     private String sex;
 9     //两个构造方法
10     // 无参
11     public Penguin(){
12 
13     }
14     //有参
15     public Penguin(String name,int age, String sex){
16         this.name=name;
17         this.age=age;
18         this.sex=sex;
19     }
20     //set(),get()方法
21     //名字
22     public void setName(String name){
23         this.name=name;
24     }
25     public String getName(){
26         return name;
27     }
28     //年龄
29     public void setAge(){
30         this.age=age;
31     }
32     public int getAge(){
33         return age;
34     }
35     //性别
36     public void setSex(){
37         this.sex=sex;
38     }
39     public String getSex(){
40         return sex;
41     }
42 }
43 
44 //测试类
45 public class Test04 {
46     //程序入口
47     public static void main(String[] args) {
48         //实例化数组
49         Penguin[] penguins = new Penguin[2];
50         //实例化输入流
51         Scanner input = new Scanner(System.in);
52         //使用循环
53         for (int i = 0; i < penguins.length; i++) {
54             System.out.println("请输入第" + (i + 1) + "个企鹅的名字");
55             String name = input.next();
56             System.out.println("请输入第" + (i + 1) + "个企鹅的年龄");
57             int age = input.nextInt();
58             System.out.println("请输入第" + (i + 1) + "个企鹅的性别");
59             String sex = input.next();
60             //实例化对象 使用构造方法
61             Penguin P = new Penguin(name, age, sex);
62             //将对象存入数组中
63             penguins[i] = P;
64         }
65         //使用for循环遍历数组
66         for (int j = 0; j < penguins.length; j++) {
67             System.out.println(penguins[j].getName() + "\t"
68                     + penguins[j].getAge() + "\t" + penguins[j].getSex());
69         }
70     }
71 }

二、继承

  1.作用:继承可以让子类继承父类,得到父类的资源。

  2.关键字:extends;

  3.概念:共性抽取。

  4.java继承需要注意的点:

    • 子类不能获取到父类私有的资源,即使用private修饰的资源(使用private修饰的资源只能在本类中使用);
    • 子类不能继承父类的构造方法(因为构造方法的方法名必须是本类的类名,其他类名是不可以的);
    • 父类的构造方法不能继承,但是子类可以调用父类的构造方法;
    • super表示当前对父类对象的引用(调用语法:super()调用无参构造,super(参数列表)调用父类的有参构造);

  5.java单继承

    • 一个子类只能有一个直接的父类,但可以有间接父类(爷爷类);
    • java只支持单继承,不支持多继承,支持多层次继承;
    • 一个类如果没有继承任何类,那么这个类的默认父类是object,所有类的直接父类或者是间接父类;

  6.在继承中访问成员变量的特点

    (1)若子类变量名与父类变量名重名的时候,优先访问子类的变量;

    (2)若子类变量名与父类变量名不重名,优先访问子类的变量,如果子类没有,则会向上进行查找,一直找到object,若没有找到,则报错;

  7.示例

 1 //父类
 2 class A {
 3     int numA = 100;
 4     int num = 200;
 5 }
 6 //子类
 7 class B extends A{
 8     int numB=1000;
 9     int num=2000;
10 }
11 //测试类
12 public class Test04 {
13     public static void main(String[] args) {
14         //实例化子类对象
15         B p = new B();
16         System.out.println(p.num);
17         System.out.println(p.numA);
18         System.out.println(p.numB);
19     }
20 }

  8.this与super

    (1)this表示当前对象的引用,super表示当前对象父类对象的引用;

    (2)比较

      • 构造方法:this只能访问自身的构造方法,super只能访问父类的构造方法;
      • 成员变量:this.变量名-->既可以访问自身成员变量,也可以访问到父类的成员变量;super.成员变量,只能访问到父类的成员变量;
      • 成员方法:this.方法名()--->既可以访问的自身成员方法,也可以访问父类的成员方法;super.方法名--->只能访问到父类的成员方法;

    (3)示例

 1 //父类
 2 class Dad{
 3     int num=10;
 4     public void show(){
 5         System.out.println("我是父类的方法");
 6     }
 7 }
 8 //子类
 9 class Son extends Dad{
10     int num = 20;
11     public void show(){
12         //调用父类的方法
13         super.show();//在子类方法里面又调用了父类的show:"我是父类的方法"
14         System.out.println("我是子类的方法");
15     }
16     public void showInfo(int num){
17         System.out.println(num);
18         System.out.println(this.num);//子类属性
19         System.out.println(super.num);//父类属性
20     }
21 }
22 //测试类
23 public class Test04 {
24     public static void main(String[] args) {
25         Son p = new Son();
26         p.show();//子类方法
27         p.showInfo(30);//子类方法
28     }
29 }

结果图

 

posted @ 2023-02-02 14:19  阁主想睡觉  阅读(807)  评论(0)    收藏  举报