一、Java面向对象的三个特性:封装(private)、继承(extends)和多态。
父类:
package com.itstuday.javabean; public class Person { String name; String sex; int age; //父类私有属性 private String address = "上海市浦东新区......"; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public void sleep(){ System.out.println("人要睡觉....................." ); } }
子类:
(1)
public class Student extends Person { String year; public Student(String name, String sex, int age, String year) { this.name = name; this.age = age; this.sex = sex; this.year = year; } public void study() { System.out.println(name+"在"+year+"上课.................."); } }
(2)
public class Teacher extends Person { public Teacher(String name,String sex,int age){ this.name = name; this.sex = sex; this.age = age; } public void say(){ System.out.println(name+"说好好学习.................." ); } }
测试类:
package com.itstuday.javabean; public class test01 { public static void main(String[] args) { Student s = new Student("乔巴","男",8,"三年级"); //父类继承过来的方法 s.sleep(); //学生特有的方法 s.study(); System.out.println("s = " + s.getAddress()); Teacher t = new Teacher("布鲁克","男",88); t.sleep(); //老师特有的方法 t.say(); t.setAddress("北京朝阳区"); System.out.println("t = " + t.getAddress()); } }
结果:
总结:
1.类与类之间的继承需要用到extends关键字。
2.子类继承父类后可以直接使用父类中的非私有的成员变量、方法。
3.子类继承父类后如果要用到父类中的私有变量,需要通过get set方法。
4.继承是把公共的代码提取到父类中,减少代码的冗余,提供代码复用性。
5.子类不能继承父类的构造方法,因为构造方法与类名相同性质导致。
二、继承特点
1.类和类之间支持单继承和多重继承
2.类和类之间不支持多继承
package com.itstuday.javabean; public class grandMa { String SexName = "Tome"; }
public class mother extends grandMa { }
public class daughter extends mother { //定义成员方法 public void name(){ System.out.println("SexName="+SexName); } }
三、继承中的成员特点
主要围绕:成员变量 成员方法 构造方法。
1.继承特性
父类:
package com.itstuday.javabean; public class mother { //定义成员变量 int x = 10; //构造方法 public mother () { System.out.println("父类的this="+this); System.out.println("父类的无参构造方法,x="+x); } }
子类:
public class daughter extends mother { //定义成员变量 int y = 20; //定义构造方法 public daughter() { System.out.println("子类的this="+this); System.out.println("子类的无参构造方法,x="+x+",y="+y); } }
测试类:
public class test03 { public static void main(String[] args) { daughter daughter = new daughter(); System.out.println("daughter = " + daughter); } }
执行结果:
总结:
构造方法中都有隐式三步
1) super()调用父类的无参构造方法
2)显示给本类的所有的非静态成员变量赋值
3)执行本类的构造代码块
注:第一步固定执行,二三步执行顺序与书写顺序有关系。
2.重名成员变量
父类:
package com.itstuday.javabean; public class Father { int a = 10; public Father() { System.out.println("父类的无参构造方法"+a); } } 子类:
package com.itstuday.javabean; public class Son extends Father { int a = 20; public Son(){ System.out.println("子类中的a = " + a); System.out.println("子类中用super调用 = " + super.a); } }
测试:
package com.itstuday.javabean; public class test02 { public static void main(String[] args) { Son son = new Son(); } }
执行结果:
总结:
在子类中的变量名与父类一样,如果想调用父类中的成员变量,则需要用到super关键字。
super与this
public class Son extends Father { int a = 20; public Son(){ int a = 30; System.out.println("子类中的a = " + a);//30 System.out.println("子类中用super调用 = " + super.a);//10 System.out.println("this = " + this.a);//20 } }
1)this是 *** 作本类的,super是 *** 作父类的,只有继承的时候才有super。
2)this记录着地址值,而super不能记录地址值。
3.成员方法
1.子类继承父类可以调用父类的非私有的成员方法。
2.如果子类的方法中和父类的中的方法名称相同、返回值类型一样并、参数一样切子类方法修饰权限大于或等于父类,则父类方法被重写。
方法重写只有在继承中出现。
父类:
package com.itstuday.javabean; public class Father { //成员方法 public void say(){ System.out.println("爸爸说您好!"); } }
子类:
package com.itstuday.javabean; public class Son extends Father { //成员方法 public void say(){ System.out.println("儿子说哈哈!"); } }
测试类:
package com.itstuday.javabean; public class test02 { public static void main(String[] args) { Son son = new Son(); son.say(); } }
执行结果:
子类重写父类方法后,以子类方法为主。
4.继承后构造器的特点
父类:
package com.itstuday.javabean; public class mother { //1.成员变量 int x = 10; //2.构造代码块 { System.out.println("构造代码块,x="+x); } //3.构造方法 public mother() { System.out.println("父类的无参构造方法,x="+x); } }
子类:
package com.itstuday.javabean; public class daughter extends mother { //1.成员变量 int y = 20; //2.构造代码块 { System.out.println("构造代码块,x="+x); System.out.println("构造代码块,y="+y); } //3.构造方法 public daughter() { System.out.println("子类的无参构造方法,x="+x); System.out.println("子类的无参构造方法,y="+y); } }
测试:
隐式三步执行顺序:
1)super()调用父类的无参构造方法
2)显示给非静态成员变量赋值
3)执行本类的构造代码块
注意:隐式三步的2 3步执行顺序不固定,看书写前后顺序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)