封装继承 (3)

3)super():表示调用父类的构造方法,注意:super()必须是子类构造方法中第一条语句
子类中构造方法默认第一条语句会调用父类的无参数构造方法super(),也可以手动调用父类中带参数的构造方法

5.4 练习 public class Animal { //属性 String nickname; String color; String strain; //默认构造方法 public Animal() { System.out.println("父类Animal的构造方法执行了.........."); } //带参构造方法() public Animal(String nickname,String color,String strain) { this.nickname=nickname; this.color=color; this.strain=strain; } //打印方法 public void print() { System.out.println("本动物 昵称:"+nickname+" 颜色:"+color+" 品种:"+strain); } } public class Dog extends Animal{ int love; //默认构造方法 public Dog() { super();//调用父类的默认构造方法 System.out.println("Dog子类的构造方法执行了"); } //带参构造方法 public Dog(String nickname,String color,String strain,int love) { super(nickname, color, strain);//调用父类的带参构造 this.love=love; } public void lookHome() { System.out.println(nickname+"正在给主人看家...."); System.out.println("昵称:"+super.nickname); System.out.println("颜色:"+super.color); System.out.println("品种:"+super.strain); System.out.println("亲密度:"+this.love); super.print(); } } public class Test { public static void main(String[] args) { Dog afu=new Dog(); afu.nickname="阿福"; afu.color="黑色"; afu.strain="哈士奇"; afu.love=100; afu.lookHome(); System.out.println("----------------------------------------"); //调用Dog的带参构造 Dog xiaohei=new Dog("小黑", "白色", "泰迪", 100); xiaohei.lookHome(); } }

this和super的区别:

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

​ (2) this.属性可以调用当前对象的属性包括继承的属性,super.属性可以调用父类的属性

​ (3) this.方法() 可以调用当前对象的方法包括继承的方法,super.方法()可以调用父类的方法

​ (4) this(参数) 调用本类中其他的构造方法,super(参数) 调用父类的构造方法

​ (5) this(参数)和super(参数)只能用在构造方法中,必须是第一条语句,只能调用一次,不能同时使用。

第六节:包和访问权限

​ 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。

在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突。

用package来声明包,package语句必须是java源文件中的第一条语句。(若无这条语句,则放置在无名包下)

在package语句中,用"."来指明包(目录)的层次。包对应着文件系统的目录层次结构。

一般使用公司或组织的域名的倒置+项目名或模块名来表示包名。

包名 com.baidu.oa

包名 com.alibaba.pay

6.1 创建包 package com.qf.test; public class Employee { private String name; //姓名 private int age; //年龄 private double salary; //薪水 public Employee(){ } public Employee(String name, int age, double salary){ //构造方法 this.name = name; this.age = age; this.salary = salary; } //getter和setter省略 } 6.2 导入包

为使用定义在不同包中的Java类,需要import语句来引入所需要的类。

语法格式:

import package1[.package2…].类名

import com.qf.test.Employee; public class PackageDemo { public static void main(String args[]){ Employee employee = new Employee(); } }

注意:

​ 要导入某个包中的所有类可以用:包名.*

​ 例如:import java.util.*;

​ 在同一包中的类可以直接互相引用,无需import语句。

6.2 访问权限 权限\使用范围 本类 同包中类或同包子类 不同包子类 不同包类
public   v   v   v   v  
protected   v   v   v   x  
默认[default]   v   v   x   x  
private   v   x   x   x  
package a; public class Person{ public String name; protected int age; char sex; private double sal; public Person(){} public Person(String name, int age, char sex, double sal){ this.name = name; this.age = age; this.sex = sex; this.sal = sal; } public static void main(String[]args){ Person p = new Person("张三", 12, 'm', 5000); System.out.println(p.name); System.out.println(p.age); System.out.println(p.sex); System.out.println(p.sal); } } package a; public class Student extends Person{ public static void main(String[]args){ Person p = new Person("张三", 12, 'm', 5000); System.out.println(p.name); System.out.println(p.age); System.out.println(p.sex); //System.out.println(p.sal);//同包子类中无法访问父类中私有成员 } } package a; public class Demo{ public static void main(String[]args){ Person p = new Person("张三", 12, 'm', 5000); System.out.println(p.name); System.out.println(p.age); System.out.println(p.sex); //System.out.println(p.sal);//同包类中无法访问父类中私有成员 } } package b; public class Student extends Person{ public static void main(String[]args){ Person p = new Person("张三", 12, 'm', 5000); System.out.println(p.name); System.out.println(p.age); //System.out.println(p.sex);//不同包中子类中无法访问默认权限成员 //System.out.println(p.sal); } } package b; public class Demo{ public static void main(String[]args){ Person p = new Person("张三", 12, 'm', 5000); System.out.println(p.name); //System.out.println(p.age);//不同包中不能访问受保护属性 //System.out.println(p.sex); //System.out.println(p.sal);//不同包类中无法访问父类中私有成员 } }

使用原则:

修饰类时:只能public 或 默认的

修饰成员变量和方法:可以使用public 、默认、protected 、private

局部变量不能访问权限修饰符。

第七节:方法重写

方法重载(overload):

​ 1 同一个类中,方法名相同,参数列表不同(个数不同,类型不同,顺序不同)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsspxp.html