黑马程序员技术交流社区

标题: 方法、封装 [打印本页]

作者: lilongbin2016    时间: 2016-12-12 12:47
标题: 方法、封装
java中方法分类:系统方法、自定义方法

自定义方法:第一从返回值来说:
方法的基本格式:
修饰符(public) 返回类型(引用类型、基本类型)方法名() {方法体 return 具体类型}
public String say(参数)
{

}
参数可以有的类型:基本数据类型、引用数据类型
参数的个数:无限制,如果有多个参数中间用","隔开

public String say(String msg)
{
String msg1=msg+"你好";
return msg1;
}

为什么使用类图:
好处简单明了,方便程序员沟通,已经是软件开发中一种规范。

第一个问题:为什么使用封装
因为之前使用的public修饰符所修饰的属性可以直接赋值,导致不符合业务要求。
如案例1:
编写一个类,代表云图Java讲师,要求: 具有属性:姓名、年龄 具有行为:自我介绍 云图Java讲师的最小年龄要求:28岁

要求年龄必须是28以上。如果使用方案1:
public class YunTuTeacher1{
public String name;  // 讲师姓名
public int age;          //讲师年龄 /** * 返回面授Java课程的内容 */
public String introduction() {
return  "我是" + name + ",我今年"+ age+"岁";
}
}
所以需要使用java中封装解决这个问题.
java 中什么是封装?
封装是对外隐藏内部实现的细节。
封装的实现步骤:第一步 对属性私有化使用private 关键字,
                            第二步 提高共有访问方法(set /get) set是赋值 get 获取数值
                            第三步 在set 方法中设置条件约束。
以上步骤实现方式参考案例2
public class JavaTeacher1 {
private String name;
private int age;
/**
  * set 表示赋值的意思
  */
/**
  * this 表示当前对象
  */
public void setName(String name)
{
  this.name=name;

}
public void setAge(int age)
{
  if(age<28)
  {
   System.out.println("年龄不符合要求");
   this.age=28;
  }else
  {
   this.age=age;
  }
}
/**
  *获取名字
  * @return String 类型的
  * get是固定的写法表示获取的意思
  */
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}

/**
  * 自我介绍
  */
public void introduction()
{
  System.out.println("大家好我是来自北京云图智联的:"+name+"今年:"+age);
}
}

在此案例中引入一个关键字 this:表示当前的对象,通过this 解决全局变量赋值问题。

java中的构造方法怎么实现?

构造方法的格式(语法):
修饰符(public、private) 方法名(构造方法的名字必须与类的名称一致)
public JavaTeacher2(){
}

构造方法的功能是什么?
为属性赋值的

注意在java中默认存在一个无参的构造方法,但是如果用户一旦自定义了有参的构造方法
那么无参的构造方法将不存在了。

在给JavaTeacher2 赋值的时候使用的是构造方法,但此构造方法要求将所有的属性都进行赋值
现在用户的需求是只要姓名,该如何实现(此处只讲构造方法方式)。可以使用构造方法实现
那么在“同一个类”中就需要存在“多个构造方法”。其实这就是方法重载

方法重载的规律:
第一条:在同一个类中
第二条:在同一个类中,方法名相同,方法的参数个数、类型不同
第三条:与方法的返回值类型无关
证明:以下两个方法同时存在JavaTeacher类中,但不是方法重载
/**
  * 说话
  */
public void say()
{
  System.out.println("您好我是一个普通的方法,我没有参数");
}
public String say()
{
  return "你好";
}

------------------------------------------------------------------------------------
学习总结:
第一个:画类图
问题:为什么画类图?
第二个:封装(利于维护,安全,复用性)
学习思路:为什么学习封装?
请参照JavaTeacher的案例
代码存在安全问题(给年龄赋值可以随意赋值)
怎么解决,封装
封装的实现:
第一步:使用private关键私有化共有属性
第二步:提供共有的访问方法set(赋值) get(获取)
第三步:在set方法中进行条件判断。

第三个:构造方法
java中构造方法的格式: public 类名(){}

注意了:java中默认存在一个无参的构造方法,但是显示定义了有参的构造,无参的就没有了。
问题?构造方法有没有return 关键字。
第四个:方法重载
规定:第一条在同一个类中。第二条参数的个数和类型不同。第三条与返回类型无关。

第五个:关键字 this 表示当前对象。解决在同一个类存在相同属性时赋值的问题。

后面学习继承的时候将学习方法重写或叫做方法的复写
方法的重写:第一条;发生在继承关系中,子类中重写父类的方法。
第二条:子类的重写父类的方法时要求与父类的方法完全一样。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2