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 }
结果图


浙公网安备 33010602011771号