您的位置:首页 > 其它

面向对象基础(2)

2018-02-05 20:09 99 查看
属性与修饰符

属性是用来表示一个方法或者对一个方法的字段,方便进行调用,字段是与类相关的变量。

比如Cat中设置的猫的名字,现在增加一个一个猫叫次数,ShoutNum的属性

public class Cat {
private String name ="";
private int ShoutNum=3;
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getShoutNum() {
return ShoutNum;
}
public void setShoutNum(int shoutNum) {
ShoutNum = shoutNum;
}
public Cat() {
this.name= "没想好";
}
public String Shout(){
return "我是"+name+"喵";
}
}

public修饰的是共有的,private修饰的是私有的。

我们在声明ShoutNum的时候,还产生了一个'get'方法和一个'set'方法:

get方法返回与声明相同的数据类型,表示调用时可以访问内部的字段的值或者引用。

set没有返回值的类型,只有一个隐式参数(括弧里的),用来接收传进的参数,即调用时可以给该属性赋值。

为什么用private声明的还需要有set方法呢?

因为就像一个家来说,public就是没有墙,谁都可以进。private就是四周都是墙,进不去出不来,这是不可以的,所以有了get和set方法,用来进行空气阳光神马的流通。

下面做个方法用来控制叫声次数,控制它最多叫10声:

public class Cat {
private String name ="";
private int shoutNum;
public int getShoutNum() {
return shoutNum;
}
public void setShoutNum(int Num) {
if(Num>10)
shoutNum=10;
else
this.shoutNum = Num;
}
public Cat(String name) {
this.name = name;
}
public Cat() {
this.name= "没想好";
}
public String Shout(){
for(int i = 0;i<shoutNum;i++) {
System.out.println("喵");
}
return "我是"+name;

}
}

public class CatShout   {
public static void main(String[] args) {
Cat cat = new Cat("咪咪");
cat.setShoutNum(11);
System.out.println(cat.Shout());
}

}




封装

封装可以减少耦合性,什么是耦合性?

藕,有藕断丝连只说,耦合性就是说两者直接的关系,一个变动影响了另一个,这样的影响越大,则说明耦合性越强。

封装可以实现内部的自由改动。

封装具有清晰的对外口。

就像刚才我们把Cat提取出来,在内部进行改动,在main方法中没有改动什么,在Cat方法中就有set和get让外界调用。

那么咱们来创建一个狗Dog叫的功能,嗯……很简单,仿写Cat就好了:

package demo;

public class Dog {
private String name ="";
private int shoutNum;
public int getShoutNum() {
return shoutNum;
}
public void setShoutNum(int Num) {
if(Num>10)
shoutNum=10;
else
this.shoutNum = Num;
}
public Dog(String name) {
this.name = name;
}
public Dog() {
this.name= "没想好";
}
public String Shout(){
for(int i = 0;i<shoutNum;i++) {
System.out.println("汪");
}
return "我是"+name;

}
}

package demo;

public class CatShout   {
public static void main(String[] args) {
Cat cat = new Cat("咪咪");
cat.setShoutNum(3);
System.out.println(cat.Shout());
Dog dog = new Dog("旺旺");
dog.setShoutNum(3);
System.out.println(dog.Shout());
}

}




但是有没有发现Dog和Cat的代码有很多相似的地方,或者说基本没啥不一样吗?

下一篇文章给予解释和相关代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象 封装