为什么要写这篇博客?前天,女友问过我两次关于继承与多态的问题,而没心没肺的我却没立刻帮她解答。反而最后和她吵架,说了的不好话语。现在我只想稍微补偿一下她,以我不成熟的java理解给她很简单讲解一下。然后本篇博客参考了黑马的相关内容,由于是第一篇博客,大佬看见了有意见随便说。
目录:
- 继承
- 抽象类
- 接口
- 多态
继承
继承是什么意思?
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修饰符代表这个类是抽象的,然后类里面有个抽象方法。
抽象类的使用:
//抽象类 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。我们不用立即理解什么意思,我们只需要看这个下面的公式。