<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、关于接入控制的理解</span>
在java提供的类库中(jar包)每个开发者都可以引用,利用里面提供的相关功能来进行开发,但是对于开发者不需要接触的方法的实现则需要进行控制接入,这样保证了方法的安全性,相当于jar中的class只对外提供方法接口,这样便于library提供者的维护工作。当然在最普通的java程序中是利用提供的字段来进行这方面的接入控制的。字段如下:
private:私有字段,表示除了你自己(只有在class内部)别人无法使用该变量和方法;
protected:该字段中的变量和方法只有子类可以访问和调用;
public:该字段的变量和方法对于任何人(任何的类class)都是可用的;
default:在没有任何指定类别的类、变量和方法中,java编译器会自动加上此字段,表示该内容只有在同一个包中被引用,在其它包中不能访问(相当于private字段),而在同一个包中相当于public字段。
2、关于java中的多态
一般情况下,多态的理解为一种特征多种状态,对于多态的实现一种是重写还有一种是重载。在java中当对一个object发送一个请求(message)时,为了方便不需要修改自己的消息状态,而是利用java的多态把这种消息请求交给编译器来进行。举个例子:对于一个图形类(自己写的类而不是java的图形界面编程哦),每一种图形都有draw()方法,那么我们在调用每个图形的方法时可能需要不同的message,例如调用三角形对象中的方法
triangle.draw()
而圆形的画图方法则是
circle.draw()
这样是不是感觉很重复,很麻烦,这个时候我们可以用到java中的多态,很好的实现方法。首先考虑这些所有的图形都是一个大类,这个类里面都有画图这个动作。就像所有的动物都有鼻子和眼睛一样。那么我们的代码就可以这样写,
<pre name="code" class="java">interface Shape{
public void draw();
}
class Circle implements Shape{
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("this is circle");
}
}
class Square implements Shape{
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("this is square");
}
}
class Triangle implements Shape{
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("this is triangle");
}
public void delete(){
System.out.println("this shape of triangle has been delete");
}
}
public class TestPolymorphism {
static void doSomeThing(Shape shape ){
shape.draw();
}
public static void main(String[] args) {
Shape shape = new Circle();
Shape shape2 = new Square();
doSomeThing(shape);
doSomeThing(shape2);
//Shape shape3 = new Triangle();
}
}
// 大家看看所有的图形都实现了Shape这个接口,在调用的时候直接利用shape来接受调用,在程序运行时才知道具体要执行那个具体类中的方法,这种成为late binding。这种就是多态的具体体现哦!!