六、面向对象的封装性
封装性对应的两个方法:setters & getters:(1)、setters(设置类的属性);(2)、getters(获取类的属性)。 //setters为void类型;getetrs有return语句。
常用:将类中属性设置为私有,通过类的getters和setters方法来设置和返回属性。
package com.atguigu.cn02;
/*
*一、面向对象的特性一:封装与隐藏
* 1、当创建了类的对象以后,如果直接通过"对象.属性"的方式
* 对相应的对象属性赋值的话,可能会出现不满足实际情况的意外,
* 我们考虑不让对象来直接作用属性,而是通过"对象.方法"的
* 形式,来控制对象对属性的访问。实际情况中,对属性的要
* 求就可以通过方法来实现。
*
* 解决方法:(封装性的思想)将类的属性私有化,提供公共的方法(setter & getter)来实现调用。
*
*二、权限修饰符:public private 缺省(不写的话) protected
* 可以用来修饰属性、方法。
*
* 注:1)、权限修饰符从大到小:public protected 缺省(default) private
* 2)、修饰类的权限有:public 缺省(default)
* */
public class TestAnimal {
public static void main(String[] args) {
Animal animal=new Animal();
// animal.legs=-8; //属性私有化以后不能再用这种形式赋属性值,要用“对象.方法”。
// animal.name="狗子"; //属性私有化以后不能再用这种形式赋属性值
// animal.select();
animal.setLegs(-6);
animal.eat();
animal.sleep();
animal.info();
}
}
class Animal{
//private修饰的属性出了类后不能在调用
private String name;
private int legs;
public void select() {
if(legs<0 || name=="null") {
System.out.println("您好,抱歉输入错误!");
}
}
public void eat(){
System.out.println("进食");
}
public void sleep(){
System.out.println("休眠");
}
public void info() {
System.out.println("动物:"+name+",有"+legs+"条肢体。");
}
public void setLegs(int i){
if(i>0 && i%2==0) {
legs=i;
}else {
System.out.println("您输入的数据有误");
}
}
public int getLegs() { //获取肢体个数
return legs;
}
public void setName(String name) {
name=name;
}
public String getName() {
return name;
}
}
七、java权限修饰符(方法或属性前的private、public等等):
如果不写权限修饰符默认为default类型,利用权限修饰符将方法或属性封装起来,需要对外开放的开放出来,私有的保护封装起来。
private类型的方法不能在另一个类中用实例化对象访问。
手动抛出异常:throw new RuntimeException(“提示的信息!”); //抛出异常后以后的语句将不再执行。
1、例题:
代码示例:
1)、Person类
package com.atguigu.cn02;
public class Person {
String name;
int age;
public void setAge(int i) {
if(i>0 && i<=80) {
age=i;
}else {
//如下所示为手动抛出异常代码。
throw new RuntimeException("您输入的数据有误!");
}
}
public int getAge() {
return age;
}
public void setName(String j) {
name=j;
}
public void show() {
System.out.println(name+"的年龄为:"+age);
}
}
2)、TestPerson类
package com.atguigu.cn02;
public class TestPerson {
public static void main(String[] args) {
Person p1=new Person();
p1.name="Alice";
p1.age=78;
p1.show();
Person p2=new Person();
p2.setName("Jack");
p2.setAge(96);
System.out.println(p2.getAge());
p2.show();
}
}
八、类的成员构造之三:构造器(构造方法)
Person p1=new Person(); //new后面的Person()不是一个类,而时new了后面的一个构造器。
package com.atguigu.cn03;
/*
* 类的第三个成员:构造器(constructor 构造方法)
*
*构造器的作用:
* 1)、创建对象; 2)、给创建的对象的属性赋值;
*1、设计类时,若不显示的声明类的构造器的话,程序会默认提供一个空参的构造器;
*2、一旦显示的定义了构造器,此时默认的构造器就不再提供。
*3、如何声明类的构造器,格式:权限修饰符 类名(形参){ ... };
*4、类的多个构造器间构成重载。
* * */
public class TestPerson {
public static void main(String[] args) {
Person p1=new Person(); //一个构造器,设计类时,若不显示的声明类的构造器的话,程序会默认提供一个空参的构造器。
System.out.println(p1.getName()+","+p1.getAgea());
// String str=new String("atguigu.com"); //系统默认提供的构造器
// System.out.println(str);
//
Person p2=new Person("hh");
System.out.println(p2.getName());
}
}
class Person{
private String name;
private int age;
//以下四个为创建的四个构造器
public Person(String n){
name=n;
}
public Person(){
age=20;
name="张三";
}
public Person(int a){
age=a;
}
public Person(String n,int a){
name=n;
age=a;
}
public void setName(String n) {
name=n;
}
public void setAge(int a) {
age=a;
}
public String getName() {
return name;
}
public int getAgea() {
return age;
}
}