java中如何把一个函数封装成一个类

java中如何把一个函数封装成一个类,第1张

有一个函数:a
void a(){}
封装到类B:
class B{
void a(){}
}
这样就好了,
使用:
B haha=new B();
hahaa();//调用类B的实例haha中的a方法

类的封装性即不能让外面的类随意修改一个类的成员变量;

定义一个类的成员,使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用;

为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的 *** 作,一般都有 读取和赋值 *** 作,我们一般定义两个方法来实现这两种 *** 作,即:getxxx()与setxxx();

一个类就是一个模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其他的一切内容。再进行程序设计时,应尽量避免一个模块直接修改或 *** 作另一个模块的数据,模块设计追求强内聚,弱

1 定义js类 
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类 

代码如下:

function ShapeBase() { 
    thisshow = function(){ 
        alert("ShapeBase show"); 
    }; 
    thisinit = function(){ 
        alert("ShapeBase init"); 
    }; 
}


这个类里定义了两个方法:show和init, 需要注意的是这里用到了this来声明, 而不是var, 因为用var是用来定义私有方法的 
另外, 我们还可以用prototype属性来定义Shape的方法 

代码如下:

ShapeBaseprototypeshow=function() 

    alert("ShapeBase show"); 

ShapeBaseprototypeinit=function() 

    alert("ShapeBase init"); 
}


上面这种写法看起来不太直观,我们可以将所有的方法写在一起 

代码如下:

ShapeBaseprototype={ 
    show:function(){ 
        alert("ShapeBase show"); 
    }, 
    init:function() { 
        alert("ShapeBase init"); 
    } 
};


现在, 类是写好了, 让我们写个js来测试下, 看看结果是不是跟我们想象的一样呢 

代码如下:

function test(src){ 
    var s=new ShapeBase(); 
    sinit(); 
    sshow(); 
}


看到了吧, 其调用方式和C#一模一样, 而结果也如我们所料 
到目前为止, 我们学会了如何创建js的类了, 但还只是实例方法,要是实现跟C#中的静态方法要怎么做呢? 
其实, 实现js的静态方法很简单, 看下面如何实现: 

代码如下:

//静态方法 
ShapeBaseStaticDraw = function() 

    alert("method draw is static"); 
}


2 实现JS类抽象和继承 
同样, js中也不支持类继承机制,但我们可以通过将父类prototype中的成员方法复制到子类的prototype中来实现 
和类的继承一样,JavaScript也没有任何机制用于支持抽象类但利用JavaScript语言本身的性质可以实现自己的抽象类 
首先来看看js中的虚方法, 在传统语言中虚方法是要先定义的, 而包含虚方法的类就是抽象类,不能被实例化,而在JavaScript中,虚方法就可以看作该类中没有定义的方法,但已经通过this指针使用了 
和传统面向对象不同的是,这里虚方法不需经过声明,而直接使用了, 并且类也可以被实例化 
先定义object的extend方法, 一个为静态方法,一个为实例方法, 这两个方法用于实现继承的prototype复制 

代码如下:

Objectextend = function(destination, source) { 
    for (property in source) { 
    destination[property] = source[property]; 
    } 
    return destination; 

Objectprototypeextend = function(object) { 
    return Objectextendapply(this, [this, object]); 
}


接下来我们实现一个继承类Rect, 这里先用一种简单的方法来实现。 

代码如下:

function Rect() { } 
Rectprototype = ShapeBaseprototype; //只这一句就行了 
//扩充新的方法 
Rectprototypeadd=function() { 
    alert("Rect add"); 
}


这种方法不能用于重写,如果改变了show方法, ShapeBase的show也会指向同一函数可能是由于prototype赋值只是简单的改变指向地址 
如果上面也定义了: 

Rectprototypeshow=function() { 
    alert("Rect show"); 
}


那么执行结果如下: 

function test(){ 
    var s=new ShapeBase(); 
    sshow(); //结果:Rect show 
    var r=new Rect(); 
    rshow(); //结果:Rect show 
    radd(); 
}


我们再使用objectextend实现继承, 并实现一个oninit虚方法, 修改ShapeBase如下: 

代码如下:

ShapeBaseprototype={ 
    show:function() 
    { 
        alert("ShapeBase show"); 
    }, 
    initialize:function () { 
        thisoninit(); 
    } 
};


实现Rect类继承 

代码如下:

Rectprototype=(new ShapeBase)extend({ 
  //添加新的方法 
  add:function() { 
    alert("Rect add"); 
    }, 
    //使用这种方法可以重写show方法 
    show:function() { 
        alert("Rect show"); 
    }, 
    //实现虚方法 
    oninit:function() { 
    alert("Rect oninit"); 
    } 
})

用private来表述变量或类,方法,来达到防止被一些不必要的访问和修改。例如
private class pri()
{

}
private int i;
等等。
继承:
class c
{}
class A extends c
{}
这样就是A类继承C类了
JAVA的这些面向对象语言的特性,靠在这里一言两语只能是初步了解,要深刻认识,需要自己多去写一下代码,那样才能理解面向对象语言的特性,感受到它的好处。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12605156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存