继承
什么是继承
案例分析
小结
代码说明
package StaticDemo2;
public class people {
private String name;
private int age;
public people() {
}
public people(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package StaticDemo2;
public class Teacher extends people{
// 独有的功能
public void teacher(){
System.out.println("老师教书育人。");
}
}
package StaticDemo2;
public class Student extends people{
public void student(){
System.out.println("学生再学习");
}
}
package StaticDemo2;
public class test {
public static void main(String[] args) {
// 创建子类对象看一下是否可以使用父类的属性和行为
Student s = new Student();
s.setName("小明");
s.setAge(25);
System.out.println(s.getName());
}
}
继承设计规范
设计案例
代码演示
package StaticDemo3;
public class student207 extends people207 {
private String className;
public void student(){
System.out.println(getClassName()+"的"+getName()+"学生再快乐的学习");
}
public void writerinfo(){
System.out.println("填写课程评价");
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
package StaticDemo3;
public class teacher207 extends people207 {
private String part;
// 独有属性
public void teacher(){
System.out.println(getName()+"老师再教书");
}
public String getPart() {
return part;
}
public void setPart(String part) {
this.part = part;
}
}
package StaticDemo3;
public class people207 {
private String name;
private int age;
// 共同行为
public void queryCourse(){
System.out.println(name+"开始查看课表信息");
}
public people207() {
}
public people207(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package StaticDemo3;
public class test207 {
public static void main(String[] args) {
// 创建子对象,可以使用父类的属性和行为
student207 s = new student207();
s.setAge(25);
s.setName("小明");
s.setClassName("通信工程");
System.out.println(s.getName());
System.out.println(s.getAge());
s.student();
}
}
运行结果
程序运行原理
小结
继承的特点
小结、
继承后成员变量成员方法的访问特点
就近原则
代码说明
package StaticDemo3;
public class extendsdemo{
public static void main(String[] args) {
wolf w = new wolf();
System.out.println(w.name); // 子类的
}
}
class animal{
public String name="父类动物";
}
class wolf extends animal{
public String name="子类动物";
}
结果演示
this与super访问
关键字的就近原则
package StaticDemo3;
public class extendsdemo{
public static void main(String[] args) {
wolf w = new wolf();
System.out.println(w.name); // 子类的
w.showname();
}
}
class animal{
public String name="父类动物";
}
class wolf extends animal{
public String name="子类动物";
public void showname(){
String name = "局部名称";
System.out.println(this.name); // 子类名称
System.out.println(super.name); // 父类名称
}
}
结果演示
方法的就近原则
package StaticDemo3;
public class extenddemo2 {
public static void main(String[] args) {
son s = new son();
s.run();
System.out.println("==============================");
s.go();
}
}
class people{
public void run(){
System.out.println("父类run方法");
}
}
class son extends people{
public void run(){
System.out.println("子类的run方法");
}
public void go(){
run();// 子类
this.run();//子类
super.run();//父类
}
}
小结
方法重写
什么是方法重写
代码演示
父类
package StaticDemo4;
public class phone {
public void call(){
System.out.println("打电话开始");
}
public void sendmessage(){
System.out.println("发送短信");
}
}
子类
package StaticDemo4;
public class newphone extends phone {
/*
* 方法重写
* */
public void call(){
// 声明继承父类方法
super.call();
System.out.println("支持视频通话");
}
public void sendmessage(){
super.sendmessage();
System.out.println("可以发送彩信和图片");
}
}
测试
package StaticDemo4;
public class test {
public static void main(String[] args) {
newphone n = new newphone();
n.call();
n.sendmessage();
}
}
运行结果
重写注意事项
案例分析----私有方法不能重写
案例分析—重写的优先级
子类无法重写父类的静态方法
小结
子类构造器的特点
子类构造器继承父类后的构造器特点
程序演示
父类
package StaticDemo4;
public class Animals {
public Animals(){
System.out.println("=======父类Animals无参数构造器被执行======");
}
}
子类
package StaticDemo4;
public class Cat extends Animals {
public Cat(){
System.out.println("====子类Cat无参数构造器被触发执行=====");
}
}
测试
package StaticDemo4;
public class test2 {
public static void main(String[] args) {
Cat c = new Cat();
}
}
结果
程序改进我们来观察有参数构造器是否和无参数构造器一样,我们不改变父类构造器,仅改变子类构造添加一个有参数构造器功能,其他功能不变
package StaticDemo4;
public class Cat extends Animals {
public Cat(){
System.out.println("====子类Cat无参数构造器被触发执行=====");
}
public Cat(String n){
System.out.println("=====子类有参数构造器被触发执行=========");
}
}
package StaticDemo4;
public class test2 {
public static void main(String[] args) {
Cat c = new Cat();
System.out.println("===================");
Cat c1 = new Cat("小叮当");
}
}
小结
子类构造器访问父类有参数构造器
Super调用
代码演示
父类
package StaticDemo5;
public class People {
private String name;
private int age;
public People() {
}
public People(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子类
package StaticDemo5;
public class Student extends People{
private String calssName;
// 先整一个无参数构造器
public Student(){
}
public Student(String name,int age,String calssName){
// 一定要访问父类的无参数构造器
super(name,age);
this.calssName = calssName;
}
public String getCalssName() {
return calssName;
}
public void setCalssName(String calssName) {
this.calssName = calssName;
}
}
测试类
package StaticDemo5;
public class test {
public static void main(String[] args) {
Student s = new Student("张三",25,"通信工程");
System.out.println(s.getCalssName());
System.out.println(s.getAge());
System.out.println(s.getName());
}
}
运行结果
小结
this,super使用小结
this&super详情
案例演示
主代码
package StaticDemo6;
public class Student {
private String name;
private String schoolName;
public Student() {
}
// this调用本类构造器,这里并没有用继承
public Student(String name){
this(name,"学校未知");
}
public Student(String name, String schoolName) {
this.name = name;
this.schoolName = schoolName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
}
测试
package StaticDemo6;
public class Test {
public static void main(String[] args) {
Student s = new Student("乔巴","java培训");
System.out.println(s.getName());
System.out.println(s.getSchoolName());
System.out.println("======================================");
Student s1 = new Student("小王");
System.out.println(s1.getName());
System.out.println(s1.getSchoolName());
}
}
运行结果
参考
黑马程序员