JAVA基础(方法重写)

1,什么是方法重写

  • 重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类)

2,方法重写的应用:

  • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。

【1】案例

class Demo7_Phone {

    public static void main(String[] args) {

        Ios8 i = new Ios8();

        i.siri();

        i.call();

    }

}



/*

B:方法重写的应用: 

   * 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。

    ios7系统 siri speak English

    ios8系统 siri 说中文

*/





class Ios7 {

    public void call() {

        System.out.println("打电话");

    }





    public void siri() {

        System.out.println("speak English");

    }

}





class Ios8 extends Ios7 {

    public void siri() {

        

        System.out.println("说中文");

        super.siri();

    }

}

3,方法重写的注意事项

【1】方法重写注意事项

  • 父类中私有方法不能被重写

    • 因为父类私有方法子类根本就无法继承

  • 子类重写父类方法时,访问权限不能更低,最好就一致

  • 父类静态方法,子类也必须通过静态方法进行重写

    • 其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)

        

  • 子类重写父类方法的时候,最好声明一模一样。

4,方法重写和方法重载

【1】Override和Overload的区别?Overload能改变返回值类型吗?

  • overload可以改变返回值类型,只看参数列表

  • 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的

  • 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

【2】子类对象调用方法的时候:

        * 先找子类本身,再找父类。

5,案例

【1】没有使用继承时

class Test3_Person {

    public static void main(String[] args) {

        System.out.println("Hello World!");

    }

}

/*

* 使用继承前的学生和老师案例

    * 属性:姓名,年龄

    * 行为:吃饭

    * 老师有特有的方法:讲课

    * 学生有特有的方法:学习

*/





class Student {

    private String name;                    //姓名

    private int age;                        //年龄





    public Student() {}                        //空参构造





    public Student(String name,int age) {    //有参构造

        this.name = name;

        this.age = age;

    }





    public void setName(String name) {        //设置姓名

        this.name = name;

    }





    public String getName() {                //获取姓名

        return name;

    }





    public void setAge(int age) {            //设置年龄

        this.age = age;

    }





    public int getAge() {                    //获取年龄

        return age;

    }





    public void eat() {                        //吃饭

        System.out.println("学生吃饭");

    }





    public void study() {                    //学习

        System.out.println("学生学习");

    }

}





class Teacher {

    private String name;                    //姓名

    private int age;                        //年龄





    public Teacher() {}                        //空参构造





    public Teacher(String name,int age) {    //有参构造

        this.name = name;

        this.age = age;

    }





    public void setName(String name) {        //设置姓名

        this.name = name;

    }





    public String getName() {                //获取姓名

        return name;

    }





    public void setAge(int age) {            //设置年龄

        this.age = age;

    }





    public int getAge() {                    //获取年龄

        return age;

    }





    public void eat() {                        //吃饭

        System.out.println("老师吃饭");

    }





    public void teach() {                    //学习

        System.out.println("老师讲课");

    }

}

【2】使用继承后

class Test4_Person {

    public static void main(String[] args) {

        Student s1 = new Student();

        s1.setName("张三");

        s1.setAge(23);

        System.out.println(s1.getName() + "..." + s1.getAge());

        s1.eat();

        s1.study();





        System.out.println("------------------");

        Student s2 = new Student("李四",24);

        System.out.println(s2.getName() + "..." + s2.getAge());

        s2.eat();

        s2.study();

    }

}

/*

* 使用继承后的学生和老师案例

*/





class Person {

    private String name;                    //姓名

    private int age;                        //年龄





    public Person() {}                        //空参构造





    public Person(String name,int age) {    //有参构造

        this.name = name;

        this.age = age;

    }





    public void setName(String name) {        //设置姓名

        this.name = name;

    }





    public String getName() {                //获取姓名

        return name;

    }





    public void setAge(int age) {            //设置年龄

        this.age = age;

    }





    public int getAge() {                    //获取年龄

        return age;

    }





    public void eat() {                        //吃饭

        System.out.println(name  + "吃饭");

    }

}





class Student extends Person {

    public Student() {}                        //空参构造





    public Student(String name,int age) {

        super(name,age);

    }

    

    public void eat(){

        System.out.println(this.getName()  + "学生吃饭");

    }





    public void study() {

        System.out.println(this.getName() + "学习");

    }

}





class Teacher extends Person {

    public Teacher() {}                        //空参构造





    public Teacher(String name,int age) {

        super(name,age);

    }

    

    public void eat(){

        System.out.println(this.getName()  + "老师吃饭");

    }

    public void teach() {

        System.out.println(this.getName() + "讲课");

    }

}

猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/92061345