关于JAVA继承、多态、抽象类、接口等性质的学习(1)
最近几日把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不久,正在学习中,可能很多地方的理解还是有问题的,希望众博友勿喷。

浙公网安备 33010602011771号