zoukankan      html  css  js  c++  java
  • Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了.

    不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了.

    继承的关键字:extends

    格式如下: class 子类名 extends父类名{

    ...

    }

    例如 学生是继承人类这一父类的.

    class student extends person{

    ...

    }

    如果一个类的声明没有使用关键字extends,则这个类默认是继承Object类的.Object是所有类的父类.Object是java.lang包中的类.

    当一个子类继承了一个父类时,子类可以调用父类中的所有方法和成员变量.子类也可以单独自己声明方法或者变量.

    下面的代码创建了4个class.分别是Dog,Cat,Animal和包含主函数的Main类.其中Dog和Cat是继承父类Animal的.

    Cat继承Animal类:

    package com.cnblogs;

    public class Cat extends Animal{  

    //不带参数的默认构造器

     public Cat(){   

    //super();必须出现在构造方法的首行.   //this();也如此.  

         super();

     // super("XX",10);  该代码表示调用父类带参的构造器  

     System.out.println("Cat构造器");  }

     /* public String name;

       public int age;  

       public void walk(){

        System.out.println("Cat....walk");  

    }

     public void sleep(){

        System.out.println("Cat....sleep");

     }  */

     //注解提示

    @Override  

    public void how(){

        System.out.println(name +" "+ "Cat....miaomiao");  

    //super 强制调用父类的show()方法法.

    //如果没有super,show();是this.show();的默认写法.   

    //步骤是:先调用子类的show()方法.子类如果没有show方法才调用父类的show()方法  

        super.show();

     }

     public void show(){

        System.out.println(name +" "+ "Cat----->show");  

    }

    }

    声明Dog类:

    package com.cnblogs;

    public class Dog extends Animal {  

    /*public String name;

       public int age;  

       public void walk(){

          System.out.println("Dog....walk");  

    }  

       public void sleep(){  

         System.out.println("Dog....sleep");

     }  */

       public void how(){  

         System.out.println(name +" "+ "Dog....wangwang");  }

    }

    创建一个Animal的父类:

    package com.cnblogs;

    //Animal不写继承就是默认继承Object类. //抽象类不能new.传入的是子类的实例对象.

    public abstract class Animal extends Object{  

        public String name;

        public int age;  

    //默认的不带参的构造器

     public Animal(){  

        this("baobao",2);

    //this();调用的是下面带参的Animal的方法   

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

     }  

    //带参的构造器.给属性赋初始值

    public Animal(String name,int age){   

        this.name = name;  

        this.age = age;  

        System.out.println("Animal--->(name,age)");

     }  

    public void walk(){

        System.out.println(name + "---->walk");   

        sleep();

        how();

    //this.show 调用的是子类的show()方法,如果子类没有show()方法.在调用父类的show()方法.  

        this.show();

     }  

     public void sleep(){

        System.out.println(name + "---->sleep");

     }  

    //抽象方法.

     public abstract void how();  

     public void eat(){

        System.out.println(name + "---->Eat");

     }  

     public void play(){ 

        System.out.println(name + "---->Play");

     }

     public void show(){

        System.out.println(name +" "+ "Animal---->show");

    }

    }

     Main类(包含主函数):

    package com.cnblogs;

    public class Main {

     public static void main2(String[] args) {  

     //生成一个cat对象

        Cat cat = new Cat();  

        cat.name ="xiaohua";  

        cat.age = 3;  

        cat.walk();   

        cat.how();   

    //生成一个dog对象  

        Dog dog = new Dog();  

        dog.name = "xiaomei";   

        dog.age= 3;  

        dog.walk();  

        dog.eat();  

        dog.how();  

     //调用的是调出来的对象  

        Animal animal = new Cat();

        animal.name = "HH";

      //调用的是子类Cat()的how()方法.   

        animal.how();   

        Animal animal2 = new Dog();

        animal2.name = "XX";  

     //调用的是子类Dog()的how方法  

        animal2.how();      

        animal.walk();     

     //GetMsg方法要求传入的是子类cat,所以传入的必须是cat,而不能是animal.  

        GetMsg(cat);  

        GetMsg(dog);  

        GetMsg(animal2);

     }  

    /* public static void GetMsg(Cat cat){

      cat.how();  

    }*/  

    //将子类的对象传入给父类的引用   //比上面的传入单独的cat灵活,一般使用下面这种方法  

    public static void GetMsg(Animal animal){

        animal.how();   

    }  

    /** *1. new一个对象以后先调用子类Cat的第一个方法,运行super();调用父类Animal的第一个方法   

      *2. 父类中的构造方法执行this();方法,this方法又调用Animal带参数的方法并输出;在返回不带参的构造器执行this();下面的输出语句   

      *3. 在返回子类Cat中执行super();下面的语句,输出"Cat构造器"   

      *4. 接着animal.how()调用new出来的对象 cat的how()方法   

      *5. 执行子类Cat()方法中的how()方法,并输出.   

      *6. 接着在运行how()方法中的super().show;然后调用父类Animal的show()方法.并输出相应的结果.    * */  

    public static void main(String [] args){  

        Animal animal = new Cat();   

        animal.how();   }

    }

    super();调用父类的构造器,方法和属性.

    this();调用该方法的当前对象.

    今天博客园居然不能插入代码块,不知道出什么问题只能自己手写,写了半天.看的头都晕了.

  • 相关阅读:
    java基础英语---第十九天
    java基础英语---第十六天
    java基础英语---第十七天
    java基础英语---第十四天
    java基础英语---第十五天
    java基础英语---第十三天
    设计模式
    设计模式
    设计模式
    设计模式
  • 原文地址:https://www.cnblogs.com/jerryho/p/4417474.html
Copyright © 2011-2022 走看看