最近几日把JAVA编程思想翻了翻,顿时发现以前看的所谓XXX从入门到精通系列讲的简直不能看,只能是当做入门中的入门书吧。
为了日后不会忘记,把一些想法写下来。
关于继承和多态
我想继承是面向对象语言不可少的一部分吧,引用JAVA编程思想的一句话:“当创建一个类时,总是在继承”。继承通过extends关键字实现,继承实现后,基类中所有的域和方法都可以得到。
class First{ private String s = "extend"; First(){ } public void two(){ System.out.println("1"); } public void three(){ System.out.println("2"); } } public class ExtendsDemo extends First{ ExtendsDemo(){ } /*public void two() { System.out.println("3"); } public void three() { System.out.println("4"); }*/ public static void main(String[] args){ ExtendsDemo d = new ExtendsDemo(); First f = new First(); d.two(); d.three(); f.two(); f.three(); } }
当子类方法覆盖父类方法时,此时子类对象调用的为子类的方法,而在子类中创建的父类对象调用的仍为父类的方法。若子类方法没有覆盖父类方法时,则子类对象和父类对象调用的统一为父类的方法。
另外有一点,父类的私有域,在子类是不能访问的。
在多重继承的情况下,构造器的调用时由上往下进行的,因而基类在其导出类构造器能够访问它之前就已经完成了初始化。
class First{ public First() { //基类 System.out.println("First()"); } } class Second extends First{ public Second() { System.out.println("Second()"); } } class Apple{ public Apple() { System.out.println("Apple()"); } } class Banana{ public Banana() { System.out.println("Banana()"); } } public class Test1 extends Second{ private Apple a = new Apple(); private Banana b = new Banana(); public Test1() { System.out.println("Test1()"); } public static void main(String[] args){ Test1 t = new Test1(); } }
上面的输出分别是
First()
Second()
Apple()
Banana()
Test1()
也就是说构造器的调用顺序先从基类开始依次往下,然后按声明顺序调用成员的初始化方法,最后调用导出类构造器的主体(构造方法)。
ps:博主刚开始接触java不久,正在学习中,可能很多地方的理解还是有问题的,希望众博友勿喷。
时间: 2024-10-07 19:53:16