zoukankan      html  css  js  c++  java
  • 抽象方法,接口,多态的总结

      为什么要写这篇博客?前天,女友问过我两次关于继承与多态的问题,而没心没肺的我却没立刻帮她解答。反而最后和她吵架,说了的不好话语。现在我只想稍微补偿一下她,以我不成熟的java理解给她很简单讲解一下。然后本篇博客参考了黑马的相关内容,由于是第一篇博客,大佬看见了有意见随便说。

    目录:

    • 继承 
    • 抽象类
    • 接口
    • 多态

    继承

    继承是什么意思?

      A用extends关键字继承了B后,那么A类可以调用B类的非私有属性与方法。
      eg:
    public class ncu {
        String name ="昌大研究生";
        public void study(){
            System.out.println("昌大学生爱学习..");
        }
    }

     上述代码是父类

    public class huanhuan extends ncu {
        String name1 ="张焕";
    }

    上述代码是子类继承了父类ncu

    public class 继承demo {
        public static void main(String[] args) {
            huanhuan hh = new huanhuan();
            System.out.println(hh.name); //调用父类的属性
            System.out.println(hh.name1);
            hh.study();//调用父类的方法
        }
    }

    上面是运行程序,下面是运行结果:

    昌大研究生
    张焕
    昌大学生爱学习..

    可以看到,huanhuan继承了nuc,所以可以调用nuc的属性以及方法study。

    抽象类

    抽象类是什么意思?

      了解抽象类前我们说下抽象方法。抽象方法就是没有主主体的方法。比如:

    public abstract void eat();

      我们可以看到这个方法名前面有个abstract,表明这个方法是抽象的。并且方法后面没有主体,也就是没有大括号那部分。而抽象类就是包含了抽象方法的类。比如:

    public abstract class ncu_absract {
        String name ="昌大研究生";
        public void study(){
            System.out.println("昌大学生爱学习..");
        }
        public abstract void eat();
    }

    我们可以看到这个类名前面有个abstract修饰符代表这个类是抽象的,然后类里面有个抽象方法。

    抽象类的使用:

    继承抽象类的子类必须重写父类所有的抽象方法这句话很重要。我们看个例子吧,还是刚才的ncu只是里面多了个抽象方法,所以变成了抽象类。
    //抽象类
    public abstract class  nuc_abstract {
        String name ="昌大研究生";
        public void study(){
            System.out.println("昌大学生爱学习..");
        }
        public abstract void eat();//抽象方法
    }

    上述代码是抽象类

    public class huanhuan extends nuc_abstract {
        String name1 ="张焕";
        @Override
        public void eat() {//重写了抽象父类中的抽象方法
            System.out.println("吃包子");
        }
    }

    上述代码是子类继承了父类ncu_abstract且重写了父类中的抽象方法eat。注意,必须重写抽象方法。

    public class 抽象类demo {
        public static void main(String[] args) {
            huanhuan hh = new huanhuan();
            hh.eat();//重写后的方法
            hh.study();//父类的方法
        }
    }

    运行结果:

    吃包子
    昌大学生爱学习..

    小结,抽象方法就是没有主体的方法。有抽象方法的类叫作抽象类,继承抽象类要重写抽象方法。

    接口

    什么是接口?

      上面解释了抽象类,那么我们将很好的理解什么是接口。有抽象方法的类叫抽象类,但是抽象类里面还可以有非抽象的方法与属性,就像上面nuc_abstact里面的study方法一样。但是接口里面只有方法

    我们来看一个接口:

    public interface ncu_interface {
            abstract   void  exercise();
            abstract   void  play();
              default  void  walk(){
            System.out.println("走路");
        }
    }

    我们可以看到接口的修饰符是interface。然后接口内部全是方法,上面有两个抽象方法,exercise与play。还有一个默认方法,walk。

    public class huanhuan implements ncu_interface {
    
        @Override//重写方法
        public void exercise() {
            System.out.println("打羽毛球");
        }
        @Override//重写方法
        public void play() {
            System.out.println("看剧");
        }
    }

    上面的代码是huanhuan这个类实现了接口nuc_interface并且重写了接口中的抽象方法。注意:抽象方法必须重写,如同继承抽象类一样。

    public class 接口_demo {
        public static void main(String[] args) {
            huanhuan hh = new huanhuan();
              hh.exercise();
              hh.play();
              hh.walk();
        }
    }

    运行结果:

    打羽毛球
    看剧
    走路

    我们可以看到,主程序输出了接口中的默认方法与我们重写后的方法的内容。

    小结:接口就是里面就是一堆方法,实现接口的类要重写接口中的抽象方法。

       注意:一个类只能继承一个类,但是一个类可以实现多个接口。

    public class huanhuan implements ,inter1,inter2 {
        
    }

    多态

    学习到了多态,的确最开始很懵逼,我当时也是看不太懂。然后后面多看了几遍,才有了一些理解。所以焕焕在这里看着难受是正常的,不要烦躁,继续加油。

    什么是多态?

    生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如我和焕焕都有自己娱乐的方式,她是看剧,我是打游戏。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。可见,即使我和焕焕有一些不同的性格与习惯,但是我们要互相包容,而不是放弃,逃避。
    回到正题,我们来看个例子:
    public interface ncu_多态 {
        abstract void play();
        abstract void eat();
    }

    上述代码我们先定义一个接口

    public class huanhuan extends ncu_多态 {
        @Override
        public void play() {
            System.out.println("看剧");
        }
    
        @Override
        public void eat() {
            System.out.println("吃包子");
        }
    }
    public class wzw iextends ncu_多态 {
        @Override
        public void play() {
            System.out.println("玩游戏");
        }
    
        @Override
        public void eat() {
            System.out.println("吃干饭");
        }
    }

    上面两个代码可以看到我和焕焕都实现了nuc_多态这个接口,只是我们在play与eat这两个抽象方法的重写不一样。她的play是看剧,我的play是玩游戏,这就是多态的意思。

    public class 多态_demo {
        public static void main(String[] args) {
            ncu_多态 wzw =new wzw();
            ncu_多态 hh =new huanhuan();
            wzw.eat();
            wzw.play();
            hh.eat();
            hh.play();
        }
    }

    然后这上面的代码有点难以理解了,这就是父类引用指向子类对象。即:引用是父类ncu_多态,但是对象时子类,wzw与huanhuan。我们不用立即理解什么意思,我们只需要看这个下面的公式。

    父类类型 变量名 = new 子类对象;
    变量名.方法名(); 
    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。 
    我们可以看到上面的代码就是按照这个格式写的,父类类型,子类对象。然后如何调用方法就是下面的口诀,这就是简单的多态的知识。
     
     
     
    焕焕你看见这儿你就是胜利了,不懂找我

     

      

      

      

      

      
  • 相关阅读:
    QA的几个经典问题(1)
    QA的几个经典问题(2)
    通过Android录音进行简单音频分析
    Android在TextView中实现RichText风格
    Handler Should be static or leaks Occur?
    如何查看华为EMUI系统APK源码?
    ServiceManager: Permmission failure: android.permission.RECORD_AUDIO
    Android 4.4以上的存储读写权限
    如何使用Android中hide的类和方法进行开发?
    在Mac mini上编译Android源码
  • 原文地址:https://www.cnblogs.com/wzwchongchong/p/12597662.html
Copyright © 2011-2022 走看看