文章目录
- 一、类的组合和复用
- 二、实例成员与类成员
- 所以总结一下:
一、类的组合和复用
我当时第一次看见,然后又看书上的定义,感觉真的是”高大上“,就是不好理解,后来一查才发现超级简单。
类的组合和复用:简单来说,就是在一个类中new另外一个类(组合)
eg:
class Door{//字段和方法
}
class Wheel{//字段和方法
}
public class Car{Door d = new Door();wheel w = new wheel();//其他字段和方法
}
而且可以不断的new同一个类(复用)
eg:
public class Car{Door d = new Door();wheel w1 = new wheel();wheel w2 = new wheel();wheel w3 = new wheel();
}
二、实例成员与类成员
类成员就是普通的变量或者方法前面加一个static。
简单来说,类成员就相当于是所有类共同拥有的一个地方,如果其中所有类都可以对其进行修改,一经修改,则其他类里面的该类成员也会变成修改后的东西。
只要含有类成员的类,一经加载,那么其中的类成员就会被分配内存(始终都不会变),如果不是类成员,每new一次,就会分配一个新内存。所以类成员可以直接通过类名.类成员 或者 对象.类成员 调用;而实例成员只能靠对象调用。
这就会导致一个有意思的事情,那就是重写的问题。
这里菜鸟为大家举两个列子:
一、
class A{static int m;static void f() {m = 20;}class B extends A{void f() {m = 222;}}
}
这里大家初看确实像没有问题,但将其打入eclipse之后就知道了,其会报错:
This instance method cannot override the static method from A
意思是:
实例方法无法重写来自A
然后,如果你在B的方法前加一个static
class A{static int m;static void f() {m = 20;}class B extends A{static void f() {m = 222;}}
}
这样并不会报错,但你以为他重写了吗?
其实并没有,这个B只是隐藏了A中的f()。
这个你可以在B的上一行加上一个@voerride,@Override 的作用是:如果想重写父类的方法,比如:toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性。
Override的用法:Override:java.lang.Override是一个marker annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。 )
所以总结一下:
static方法是不能被重写的,只能被覆盖。换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性。