Java学习日记(day9)

面向对象(二)

1. 继承

子类继承父类,拥有父类中属性和行为的特征。

实现继承,前提条件必须满足 “子类 is a 父类”的关系。

例:猫是一个动物,狗是一个动物

这里用一个简单的小例子来说明一下:

一个学校需要招收两个老师,一个是JAVA老师,一个是android老师。这两个类显然有个共同的父类老师:

package com.lianxi02;
 public class Teacher {
    private String name;
    private int age;
    private String xl;
    
    public Teacher() {
    }
    public Teacher(String name, int age, String xl) {
        this.name = name;
        this.age = age;
        this.xl = xl;
    }
JavaTeacher
    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;
    }
    public String getXl() {
        return xl;
    }
    public void setXl(String xl) {
        this.xl = xl;
    }
    public String jieShao(){
        String str="";
        str+="面试官,您好,我是"+name+"\r\n";
        str+="今年"+age+"\r\n";
        str+="学历"+xl+"\r\n";
        return str;
    }
    public String shiJiang(){
        String str="";
        return str;
    }
 }

接下来我们先建立Java老师和android老师的子类

package com.lianxi02;
 public class JavaTeacher extends Teacher{
    public JavaTeacher() {
    }
    public JavaTeacher(String name, int age, String xl) {
        //在子类构造方法中调用父类的构造
        super(name, age, xl);
    }
    @Override
    public String shiJiang() {
        String str="";
        str+="今天试讲的内容是《面向对象基础》\r\n";
        str+="请打开idea编写一个java类\r\n";
        str+="试讲结束";
        return str;
    }
 }
school
 main
 
package com.lianxi02;
 public class AndroidTeacher extends Teacher{
    public AndroidTeacher() {
    }
    public AndroidTeacher(String name, int age, String xl) {
        super(name, age, xl);
    }
    @Override
    public String shiJiang() {
        String str="";
        str+="今天试讲的内容是:Android中的四大天王\r\n";
        str+="试讲结束";
        return str;
    }
 }

之后我们建立学校类来使用我们实现的方法:

 package com.lianxi02;
 public class School {
    public void testTeacher(Teacher tea){
        String str="";
        str+=tea.jieShao();
        str+=tea.shiJiang();
        System.out.println(str);
    }
 }

最后我们使用main函数来创造对象来调用类函数:

package com.lianxi02;
 public class Main {
    public static void main(String[] args) {
        School school=new School();
        JavaTeacher javaTeacher=
                new JavaTeacher("张三",28,"本科");
       
        school.testTeacher(javaTeacher);
        AndroidTeacher androidTeacher=
                new AndroidTeacher("李四",34,"博士");
 
        school.testTeacher(androidTeacher);
    }
 }

重写:在继承关系中,子类中出现与父类中方法签名完全一致的方法,访问修饰符高于父类、返回值类型一致、方法名相同、参数列表相同;构造方法、静态方法、终态方法和本地方法不能被覆盖,私有的方法也不能覆盖。

2.多态

一个父类表现为多个子类的能力,老师分别表现为JavaTeacher和AndroidTeacher

实现多态的前提:

  • 在继承关系中子类覆盖父类中的方法
  • 父类引用指向子类对象

        Teacher tea=new JavaTeacher();

        Teacher t=new AndroidTeacher();

在编写程序的过程中,发现类中的代码过多,把不同作用的方法,放在不同类中, 如果多个类中存在相同的内容,则提取父类,把相同的内容放在父类中,必须满足"is-a"的关系

3.重载和重写

重载和重写都是多态的表现形式

重载:静态多态,一个类中出现两个及两个以上的同名方法,参数列表不同(参数的个数、参数的类型 和类型的顺序,跟返回值类型和修饰符无关,任何都可以被重载

重写:动态多态,在继承关系中,子类中出现与父类中签名完全一样的方法,修饰符高于等于父类、返回值类型相同、参数列表相同、声明异常的类型一致。以下方法不能被重写:

  • 私有方法
  • 构造方法
  • static修饰的静态方法
  • final修饰的方法
  • 本地方法

4.super和this

super:在继承关系中,子类中使用的父类对象

this:在本类中自己的对象

作为对象使用:

  • this:表示本类对象,this.xxx() 调用本类中的方法
  • super:表示父类对象,super.xxx() 调用父类中的方法

作为构造方法使用:

  • this():本类构造方法中调用其他构造方法,必须是第一句
  • super():子类构造中调用父类的构造方法,必须是第一句

注意:this()和super()不能同时出现在构造方法 如果子类中没有现实的写明构造方法,则默认调用父类空参构造;如果父类中没有空参构造,必须在子类通过super()的形式显示的写明。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值