superthis class Person Person protected String name protected

  • Slides: 25
Download presentation

super&this示例 class Person { // 定义Person类 protected String name; //姓名 protected String sex; //性别

super&this示例 class Person { // 定义Person类 protected String name; //姓名 protected String sex; //性别 protected int age; //年龄 public void register(String n, String s, int a) { //设置数据成员 name=n; sex=s; age=a; } public void show. Me() { //显示人员信息 System. out. println("姓名:"+name+",性别:"+sex+", 年龄:"+age); } 类Person中定义了3个成员和2个方法 } register()和show. Me()。在方法show. Me()中, 可以使用this. name来替换name,this代表 Person类对象本身。

super&this示例(续) class Student extends Person { private String department; //系别 private String specialty; //专业

super&this示例(续) class Student extends Person { private String department; //系别 private String specialty; //专业 public void student. Register(String n, String s, int a, String dep, String spe) { super. register(n, s, a); //调用父类方法 this. department=dep; //访问自身成员变量 this. specialty=spe; //访问自身成员变量 } public void show. Student () { //显示学生类数据成员 System. out. println("姓名:"+super. name+",性别:" + super. sex+ ",年龄:" +super. age+ ",系别:" +this. department + ",专业:"+this. specialty); } 方法student. Register()中,使用super表示父类对象, } super. register()即调用了父类对象方法register();使用 this表示当前类对象,this. department即引用了当前类 对象成员department。

super示例 class Person { protected String name; //姓名 protected String sex; //性别 protected int

super示例 class Person { protected String name; //姓名 protected String sex; //性别 protected int age; //年龄 public Person() { } //无参构造方法 public Person(String n, String s, int a) { //构造方法 name=n; sex=s; age=a; } public void show. Me() { //显示人员信息 System. out. println("姓名:"+name+",性别:" +sex+ ",年龄:"+age); } Person类中定义了2个构造方法,这是方法 } 的重载。程序在调用时会根据实参的个数自 动匹配相应的构造方法。

super示例(续) class Student extends Person { private String department; //系别 private String specialty; //专业

super示例(续) class Student extends Person { private String department; //系别 private String specialty; //专业 public Student(String n, String s, int a, String dep, String spe) { super(n, s, a); //调用了父类的构造方法 department=dep; specialty=spe; } public void show. Me() { //显示学生类数据成员 System. out. println("姓名:"+name+",性别:"+sex+", 年龄:"+age+",系别:"+department+",专业:"+specialty); } 在Student类的构造方法中,使用super(n, s, a) } 调用了父类构造方法。由于super(n, s, a)有3个实 参,程序匹配Person类中定义的构造方法 Person(String n, String s, int a)

get. Class()方法的使用 • get. Class()方法返回一个Class类对象,该对象内部包 含了一些能够标识当前对象的信息。如果想知道某个 对象obj是属于哪个类时,可用obj. get. Class()来查询 class A { 程序的输出显示,类对象a属于类 private

get. Class()方法的使用 • get. Class()方法返回一个Class类对象,该对象内部包 含了一些能够标识当前对象的信息。如果想知道某个 对象obj是属于哪个类时,可用obj. get. Class()来查询 class A { 程序的输出显示,类对象a属于类 private int num; A。输出中含字符串"Class",代表A是 public A(int a) { 一个类。 num=a; } } 运行结果: public class Ex 6_7{ class of obj=Class A public static void main(String args[]) { A a=new A(1); //创建A类的对象a Class ca=a. get. Class(); //用对象a调用get. Class()方法 System. out. println("class of obj="+ca); } }

equals()方法的使用 • equals()方法通过参数带入一个对象,将它 与当前对象进行比较,测试两个对象是否相 等。如果是,则返回true,否则返回false。 class A { private int num; 运行结果: public A(int

equals()方法的使用 • equals()方法通过参数带入一个对象,将它 与当前对象进行比较,测试两个对象是否相 等。如果是,则返回true,否则返回false。 class A { private int num; 运行结果: public A(int a) { a. equals(b)=false num=a; a. equals(c)=true } } public class Ex 6_8 { public static void main(String args[]) { A a=new A(1); A b=new A(5); A c=a; //声明类变量c,让它指向a所指向的对象 Boolean br 1=a. equals(b); //测试a与b是否指向同一对象 Boolean br 2=a. equals(c); //测试a与c是否指向同一对象 System. out. println("a. equals(b)="+br 1); System. out. println("a. equals(c)="+br 2); } }

覆盖Object类的to. String()方法 class A { private int num; 运行结果: public A(int a) { to.

覆盖Object类的to. String()方法 class A { private int num; 运行结果: public A(int a) { to. String() called, num=2 num=a; } public String to. String() { //覆盖to. String()方法 String str=" to. String() called, num="+num; return str; } } public class Ex 6_10 { public static void main(String args[]) { a=new A(2); System. out. println(a. to. String()); } }

多态示例 class Person { // 定义Person类 protected String name; //姓名 定义了3个register()方法,3个 方法具有不同的参数列表。 protected String

多态示例 class Person { // 定义Person类 protected String name; //姓名 定义了3个register()方法,3个 方法具有不同的参数列表。 protected String sex; //性别 protected int age; //年龄 public void register(String n, String s) { //设置姓名和性别 name=n; sex=s; } public void register(int a) { age=a; }//设置年龄 public void register(String n, String s, int a) { //设置数据成员 name=n; sex=s; age=a; } public void show. Me() { //显示人员信息 System. out. println("姓名:"+name+",性别:"+sex+", 年龄:"+age); } }

多态示例(续) public class Ex 6_11{ public static void main(String args[]) { Person p 1=new

多态示例(续) public class Ex 6_11{ public static void main(String args[]) { Person p 1=new Person(); Person p 2=new Person(); p 1. register("张三", "男", 18); p 2. register("李欣", "女"); 根据实参的不同, p 2. register(17); 自动匹配调用相应 p 1. show. Me(); 的方法 p 2. show. Me(); } } 运行结果: 姓名:张三,性别:男,年龄: 18 姓名:李欣,性别:女,年龄: 17

构造方法重载示例(续) public Person(String PName, String PSex) { //有两个变量 name=PName; sex=PSex; System. out. println("Person(String, String)

构造方法重载示例(续) public Person(String PName, String PSex) { //有两个变量 name=PName; sex=PSex; System. out. println("Person(String, String) constructor is called!"); System. out. println("姓名:"+name+" "+"性别:"+sex); } public Person(String PName, String PSex, int PAge) { //有三个变量 name=PName; sex=PSex; age=PAge; System. out. println("Person(String, int) constructor is called!"); System. out. println("姓名:"+name+" 性别:"+sex+" 年龄: "+age); } }

构造方法重载示例(续) public class Ex 6_12{ public static void main(String[] args) { Person person=new Person();

构造方法重载示例(续) public class Ex 6_12{ public static void main(String[] args) { Person person=new Person(); Person man=new Person("李明", "男"); Person women=new Person("赵梅", "女", 19); } } » 类Person中,有三个构造方法, 它们的参数表均不相同。这样,就 运行结果: Person() constructor is called! 可以用三种不同形式的参数创建并 初始化对象。重载构造方法,可以 Person(String, String) 在调用时通过参数确定调用哪个方 constructor is called! 法。在测试类中创建了person, 姓名:李明 性别:男 Person(String, int) man,women三个对象,通过参数 constructor is called! 不同分别调用构造方法Person(), 姓名:赵梅 性别:女 年 Person(String, String),和 龄: 19 Person(String, int)。