您的位置:首页 > 编程语言 > Java开发

java中的继承

2016-03-24 10:42 603 查看
java中的继承:(参考java编程思想)

子类自动覆盖父类中所有定义的非private的成员变量和普通方法。(包括protected访问修饰符修饰的成员变量和方法,也包括静态的成员变量和方法)

所以子类可以覆盖父类的静态方法。

若子类没有覆盖,就继续沿用父类的成员变量和方法。

public class Father1 {

static {

System.out.println("父类静态代码块");

}

public Father1(int a ){

System.out.println("父类:"+a);

}

public Father1(){

this(1);

System.out.println("父类无参构造");

}

}

public class Son1 extends Father1{

static {

System.out.println("子类静态代码块");

}

public Son1 (){

super();

System.out.println("子类无参构造函数");

}

public static void main(String[] args) {

Son1 son = new Son1();

}

}

输出:

父类静态代码块

子类静态代码块

父类:1

父类无参构造

子类无参构造函数

public class Father1 {

static {

System.out.println("父类静态代码块");

}

public Father1(int a ){

System.out.println("父类:"+a);

}

public Father1(){

System.out.println("父类无参构造");

}

}

public class Son11 extends Father1{

public Son11(int a) {

System.out.println("子类的构造方法:"+a);

}

public static void main(String[] args) {

Son11 son11 = new Son11(5);

}

}

父类静态代码块

父类无参构造

子类的构造方法:5

(顺序为:父类静态代码块---子类静态代码块---父类的无参构造方法---子类的构造方法)

----------------------------------------------------------------------------

public class Father1 {

static {

System.out.println("父类静态代码块");

}

public Father1(int a ){

System.out.println("父类:"+a);

}

public Father1(){

System.out.println("父类无参构造");

}

}

public class Son11 extends Father1{

public Son11(int a) {

super(1);

System.out.println("子类的构造方法:"+a);

}

public static void main(String[] args) {

Son11 son11 = new Son11(5);

}

}

父类静态代码块

父类:1

子类的构造方法:5

-------------------------------------------------------------------

子类构造方法中,如果不显示的调用super(参数),或调用super(),则会默认调用父类的无参构造方法(不管子类的构造方法是否有参)。

但是,若子类构造方法中显示调用super(参数),则调用父类相应的有参构造方法,而无参的构造方法就不会被调用了。

或者说,父类的构造方法都会被继承,默认调用无参的,只有子类构造方法显示调用父类有参构造方法,才会舍父类无参而选有参构造。

----------------------------------------------------------------------------------------------------------------------------

多态

动态绑定

当方法被调用时,系统根据当时对象本身所属的类来确定调用哪个方法,只在子类对父类方法进行覆盖时才使用,

实例方法运行时动态绑定,成员变量没有这个特性

Father f = new Son();

f.test();---------------调用子类的方法

f.a;--------------------调用Father的成员变量。

即,变量被“隐藏”,方法被“覆盖”。

public class Animal {

private int a = 1;

public String name = "animal";

public void test() {

System.out.println("父类"+name);

}

}

public class Dog extends Animal{

private int a = 3;

public String name = "dog";

public void test() {

System.out.println("子类-----"+name+"-----"+a);

}

public static void main(String[] args) {

Animal dog = new Dog();

dog.test();

System.out.println(dog.name);

}

}

输出:

子类-----dog-----3

animal

(对象名.成员变量,才会出现隐藏。)

最终类和方法:

最终类可以从其他类派生出来

最终方法不能被子类覆盖,最终类不能有子类。

最终方法可以出现在任何类中,但不能和abstract修饰符同时使用。而且不能被覆盖,但可以被重载。

--------------------

Collection接口

基本方法:

boolean add(Object obj) 添加成功为true 否则为false

Iterator iterator()迭代器

|--Object next();

|--boolean hasNext();

|--void remove();

顺序时,先判断是否存在,hasNext(),然后移动指针next(),可以取值也可以删除remove()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: