昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家说一下modifier以及不同类之间怎么进行方法调用。
首先来说一下modifier。它有四个值:public,private,default,protected.其中,当你不声明modifier的时候默认就为default。所以default不需要写出来。而且关键字default实际上也不是modifier,而是用于指示Annotation的默认值(感觉怪怪的。。)。
这个modifier其实是用于指示[b]一个类的成员的访问策略[/b]。就是指示一个类的某个方法,或者字段,更或者是成员类是否可以被外部哪些成员类访问。来看下表:
[table]
|名称|策略|
|public|可以供所有其它类访问|
|private|只能供同一类内部访问|
|default|可以被同一个package下面的其它类访问|
|protected|只可以被自己及子类成员访问|
[/table]
为了弄明白怎么回事,我们需要做个稍微复杂一点的实验,首先大家创建以下的类:
[img]http://dl.iteye.com/upload/attachment/182161/e8fe0eca-6db5-3185-83dd-abd3707b124e.gif[/img]
然后,Modifier.java里面的代码如下:
Neighbour代码:
ChildClass代码:
Foreigner代码:
除了以上的代码外,大家还可以自己做以下实验:
[list=1]
[*]在任何类里面通过new Modifier().publicMethod()来访问公共方法
[*]在任何类里面通过new Modifier().protectedMethod()来访问受限方法
[*]在任何类里面通过new Modifier().defaultMethod()来访问默认方法
[*]在任何类里面通过new Modifier().privateMethod()来访问私有方法
[/list]
除了第一点会在所有类中都成功之外,其它的几条在上面几个类的实验中应该都只会在某个类中会成功。
几个类的意义:
[table]
|类名|代表意义|
|Modifier|Modifier测试类|
|Neighbour|Modifier的邻居类,和Modifier同处于一个package层级下。|
|ChildClass|Modifier的继承类,继承了Modifier除了标有private和default以外的所有成员|
|Foreigner|跟Modifier没有任何关系的外类|
[/table]
好了,在我们结束今天的内容之前,大约预习以下后面的内容:
在例子里面,我们需要通过new Modifier()来访问Modifier类里面的东西,为什么呢?因为要访问一个类里面非静态(static)的成员,只有在把这个类的实例(instance)创建出来,分配了实际的地址段给它之后,它的成员才有对应的地址段可供访问。这就好比类是一个房子的设计蓝图,上面描述了房子的方方面面,面积啦,房间布局啦等等。但是如果房子一天没起,这些东西都不会具体话,也没办法住人。
而new Modifier()就好像起房子一样。当然,明天我们说静态方法和恒定方法的时候,会再介绍另一种方法调用的方式。
另外,关于继承。如果我们的一个类需要有某个类的大部分特点的时候,比如要写一个Apple类,而在此之前已经有一个叫Fruit的类了,而且Apple类含有Fruit的所有特征及一些自己特有的特征。那么在解决这类问题的时候就会用到继承的概念。方法很简单,就是在你的类名后面,使用extends关键字把父类和子类联系起来:
好了,今天就到此为止,谢谢大家观看。
首先来说一下modifier。它有四个值:public,private,default,protected.其中,当你不声明modifier的时候默认就为default。所以default不需要写出来。而且关键字default实际上也不是modifier,而是用于指示Annotation的默认值(感觉怪怪的。。)。
这个modifier其实是用于指示[b]一个类的成员的访问策略[/b]。就是指示一个类的某个方法,或者字段,更或者是成员类是否可以被外部哪些成员类访问。来看下表:
[table]
|名称|策略|
|public|可以供所有其它类访问|
|private|只能供同一类内部访问|
|default|可以被同一个package下面的其它类访问|
|protected|只可以被自己及子类成员访问|
[/table]
为了弄明白怎么回事,我们需要做个稍微复杂一点的实验,首先大家创建以下的类:
[img]http://dl.iteye.com/upload/attachment/182161/e8fe0eca-6db5-3185-83dd-abd3707b124e.gif[/img]
然后,Modifier.java里面的代码如下:
package modifier;
public class Modifier {
/**
* 公共方法可以供所有其它类访问
*/
public void publicMethod(){
System.out.println("Everybody can visit me.");
}
/**
* 默认访问类型方法,可供同一个package的类访问
*/
void defaultMethod(){
System.out.println("Default method");
}
/**
* 受限类型方法,可以供自己或子类访问
*/
protected void protectedMethod(){
System.out.println("Hello my child!");
}
/*
* 私有类型方法,只能被内部调用
*/
private void privateMethod()
{
System.out.println("I'm a selfish guy:p");
}
}
Neighbour代码:
package modifier;
public class Neighbour {
public void visitDefault(){
new Modifier().defaultMethod();
}
}
ChildClass代码:
package modifier.child;
import modifier.Modifier;
public class ChildClass extends Modifier {
public void visitProtected(){
protectedMethod();
}
}
Foreigner代码:
package modifier.child;
import modifier.Modifier;
public class Foreigner {
public void visitPublic()
{
new Modifier().publicMethod();
}
}
除了以上的代码外,大家还可以自己做以下实验:
[list=1]
[*]在任何类里面通过new Modifier().publicMethod()来访问公共方法
[*]在任何类里面通过new Modifier().protectedMethod()来访问受限方法
[*]在任何类里面通过new Modifier().defaultMethod()来访问默认方法
[*]在任何类里面通过new Modifier().privateMethod()来访问私有方法
[/list]
除了第一点会在所有类中都成功之外,其它的几条在上面几个类的实验中应该都只会在某个类中会成功。
几个类的意义:
[table]
|类名|代表意义|
|Modifier|Modifier测试类|
|Neighbour|Modifier的邻居类,和Modifier同处于一个package层级下。|
|ChildClass|Modifier的继承类,继承了Modifier除了标有private和default以外的所有成员|
|Foreigner|跟Modifier没有任何关系的外类|
[/table]
好了,在我们结束今天的内容之前,大约预习以下后面的内容:
在例子里面,我们需要通过new Modifier()来访问Modifier类里面的东西,为什么呢?因为要访问一个类里面非静态(static)的成员,只有在把这个类的实例(instance)创建出来,分配了实际的地址段给它之后,它的成员才有对应的地址段可供访问。这就好比类是一个房子的设计蓝图,上面描述了房子的方方面面,面积啦,房间布局啦等等。但是如果房子一天没起,这些东西都不会具体话,也没办法住人。
而new Modifier()就好像起房子一样。当然,明天我们说静态方法和恒定方法的时候,会再介绍另一种方法调用的方式。
另外,关于继承。如果我们的一个类需要有某个类的大部分特点的时候,比如要写一个Apple类,而在此之前已经有一个叫Fruit的类了,而且Apple类含有Fruit的所有特征及一些自己特有的特征。那么在解决这类问题的时候就会用到继承的概念。方法很简单,就是在你的类名后面,使用extends关键字把父类和子类联系起来:
public class Child extends Parent
好了,今天就到此为止,谢谢大家观看。