zoukankan      html  css  js  c++  java
  • 20面向对象三特征 之继承 方法重写 super

    继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息。通过extends关键词去指明类与类之间的关系,一个父类可以有多个子类,一个子类只能有一个父类即单继承

    首先我们会有一种情况我们定义几个类但是这几个类内容相似有重复,比如下列代码中的age,name,job

    public class Public {
        public static void main(String[] args) {
        
            
        }
        
    }//endclass
    
    class girl{
         int age;
         String name;
         String job;
         public void Can_PlayFootball()
         {
            System.out.println("我是女生但是能踢足球");
         }
    }
    class Boy{
         int age;
         String name;
         String job;
         public void Can_PlayGame()
         {
            System.out.println("我是男生打游戏");
         }
    
    }

    这个时候我们就想用一个公有类存放类都有属性代码修改如下

    public class Public {
        public static void main(String[] args) {
    
    
        }
    
    }//endclass
    class Person{
        int age;
        String name;
        String job;
    }
    class girl extends Person{
    
        public void Can_PlayFootball()
        {
            System.out.println("我是女生但是能踢足球");
        }
    }
    class Boy extends Person{
        int age;
        String name;
        String job;
        public void Can_PlayGame()
        {
            System.out.println("我是男生打游戏");
        }
    
    }

    此时Person就是基类 或者父类和超类   Boy和Girl就是子类也叫派生类

    继承的注意点

    1.方法的重写:当子类和父类的方法签名一样的方法,运行的就是子类的方法 

    方法重写原则---两等两小一大 :1.父类的方法的方法签名和子类的方法的方法签名要一致

                                                          2.如果父类的方法返回值数据类型是基本类型/void,子类要和父类一致

                                                          3.如果父类的方法返回的是引用类型,那么子类的方法返回值要么和父类一致要么是其子类。

                                                          4.子类抛出编译时异常小于等于父类方法抛出的编译时异常,子类方法可以抛出很多的异常,只要不超过父类方法的异常就好,以父类最大范围的异常为基准,不看个数只看异常,而运行时异常不影响我们的重写

                                                           5.访问权限修饰符 子类的方法的访问修饰符范围要大于等于父类 的方法

    如果父类的方法用private 修饰,这个方法就是私有的,对子类不可见,子类继承不到

    父类构造方法子类也是继承不到,构造代码块也是一样

    如果父类的方法用protected修饰的,子类对象要在当前子类的本类中去使用,调用方法。

    super关键词--代表父类对象的引用  super() 语句也要放在首行 和this()语句一样,所以this()语句和super语句两者不能显示的同时出现 ,可以一同出现的时候是在构造函数第一行写this(),所有的子类的构造方法默认调用父类的无参构造方法 。默认有super()语句。两者同时存在了。如果父类没有默认的构造方法,子类所有的构造方法需要通过super语句去调用对应形式的父类构造。

    调用父类的方法的时候 如果是非静态的方法需要由对象调用 那么就可以是super.sleep();调用父类的sleep()方法。

    那么这时候就有一个问题 父类对象和子类对象谁现出现?

    子类对象的产生是调用子类的构造方法,如果类中没有构造方法,就会默认添加一个无参构造。

    子类的构造方法默认含有一个调用父类构造的语句 super(); 然后调用父类的构造方法,产生父类的对象

    如果父类提供了有参构造函数,无参构造函数没有了,那么子类所有的构造方法都要去调用其他形式的父类构造方法

    class Person{
        public Person(int age) {
    
        }
        int age;
        String name;
        String job;
    }
    class girl extends Person{
    
        public girl() {
            super(10);
        }
    
    }
    class Boy extends Person{
        public Boy() {
            super(10);
        }

    因此父类对象一定比子类对象先创建

    那么父类和子类谁先出现的呢

    这个要分两个方面 1.思想层面:父类是提取子类的公有特征组成的一个类,这么看的话应该是先有多个子类从而根据公有特征得到父类。

                                 2.代码层面: 子类对象再创建的时候会优先创建父类构造方法,所以应该是父类先出现

                        从不同的层面来讲有不同的结果,所以面试的时候最好都讲到。

  • 相关阅读:
    C#
    C#
    css
    css
    css
    css
    css
    Css
    Javascript
    ASP.NET MVC
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11083559.html
Copyright © 2011-2022 走看看