面向对象

package L.javase.day09.test001;

/*
 * 学生类
 */
public class Student {
    //学号
    int no;
    //姓名
    String name;
}
package L.javase.day09.test001;

public class StudentTest {
    
    //main方法自动补全
    //输入main,然后alt + /,回车
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.no);
        System.out.println(s.name);
        
        //实例变量不能直接采用类名的方式访问
        //System.out.println(Student.no);
        
        s.no = 10;
        s.name = "张三";
        
        System.out.println(s.name);
        
        //创建学生对象
        Student lisi = new Student();
        lisi.name = "李四";
        System.out.println(lisi.name);
    }

}

 

 

package L.javase.day09.test002;
/*
 * 用户类
 */
public class User {
    int age = 20;
}
package L.javase.day09.test002;
/*
 * 用户测试类
 * 
 * 面向对象包括三大特征:
 *  - 封装
 *  - 继承
 *  - 多态
 *  
 * 封装的好处:
 *  1、封装后对于那个事物,
 *        看不到这个事物比较复杂的那一面,只能看到简单的那一面
 *  2、封装后才会形成真正的“对象”,真正的“独立体”
 *  3、封装之后意味着以后的程序可以重复使用,
 *        并且该事物适应性较强,在任何场合都能被使用
 *  4、封装之后,对于事物本身,提高了安全性
 */
public class UserTest {

    public static void main(String[] args) {
        
        //创建User对象
        User user = new User();
        
        //访问age
        //读取年龄值
        System.out.println("该用户年龄:" + user.age);

    }

}

 

 

package L.javase.day09.test003;

/*
 * 封装的步骤:
 *  1、所有属性私有化,使用private关键字表示私有,
 *        修饰的所有数据只能在本类中访问
 *  
 *  2、对外提供简单的操作入口,
 *        也就是说以后外部程序想要访问age属性,
 *        必须通过这些简单的入口进行访问
 *
 *      - 对外提供两个公开的方法,分别是set方法和get方法
 *      - 想修改age属性,调用set方法
 *      - 想读取age属性,调用get方法
 *  
 *  3、set方法的命名规范:
 *      public void setAge(int a){
 *          age = a;
 *      }
 *  
 *  4、get方法的命名规范:
 *      public int getAge(){
 *          return age;
 *      }
 *  
 *  注意:
 *   * setter和getter方法没有static关键字
 *   * 有static关键字修饰的方法如何调用:类名.方法名(实参);
 *   * 没有static关键字修饰的方法如何调用:引用.方法名(实参);
 */
public class User {
    
    //属性私有化
    private int age;
    
    //setter
    public void setAge(int a){
        //age = a;
        //编写业务逻辑代码进行安全控制
        
        if(a < 0 || a > 150){
            System.out.println("对不起,不合法");
            return;
        }
        
        //程序合法
        age = a;
    }
    
    //getter
    public int getAge(){
        return age;
    }
}
package L.javase.day09.test003;

public class UserTest {

    public static void main(String[] args) {
        //创建User对象
        User user = new User();
        
        //编译报错,age属性私有化,在外部程序中不能直接访问
        //age属性变得非常安全,但过于安全
        //对于目前的程序来说,age属性彻底在外部访问不到
        //System.out.println(user.age);
        
        //修改
        user.setAge(-100);
        
        //读取
        System.out.println(user.getAge());
    }

}

 

 

package L.javase.day09.test005;

//账户类
public class Account {

    //账户
    private String actno;
    
    //余额
    private double balance;
    
    //无参数构造器
    public Account(){
        //初始化实例变量的内存空间
        //actor = null;
        //balance = 0.0;
    }

    public String getActno() {
        return actno;
    }

    public void setActno(String actno) {
        this.actno = actno;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}
package L.javase.day09.test005;

public class User {

    // 无参数构造方法
    public User(){
        System.out.println("!");
    }
    
    // 有参数的构造方法
    public User(int i){
        System.out.println("带有int类型参数的构造器");
    }
    
    public User(String name){
        System.out.println("带有String类型参数的构造器");
    }
}
package L.javase.day09.test005;

/* 1、构造方法语法结构:
 *  [修饰符列表] 构造方法名(形式参数列表){
 *      构造方法体;
 *  }
 *  
 * 2、对于构造方法来说,“返回值类型”不需要指定,并且也不能写void
 * 
 * 3、对于构造方法,构造方法的方法名必须和类名保持一致
 * 
 * 构造方法的作用:通过构造方法的调用,可以创建对象
 * 
 * 构造方法的调用:new 构造方法名(实参列表)
 * 
 * 4、当一个类中没有定义任何构造方法,
 *        系统默认给该类提供一个无参数的构造方法,
 *        这个构造方法称为缺省构造器。
 *   建议开发中手动的为当前类提供无参数构造方法,因为太常用了
 * 
 * 5、构造方法支持重载机制
 */
public class ConstructorTest01 {

    public static void main(String[] args) {

        //调用User类的构造方法来完成对象的创建
        User u1 = new User();
        User u2 = new User(1);
        User u3 = new User("1");
    }

}
package L.javase.day09.test005;

/**
 * 构造方法的作用:
 *  - 创建对象
 *  - 创建对象同时,初始化实例变量的内存空间
 */
public class ConstructorTest02 {

    public static void main(String[] args) {

        //创建对象
        Account act1 = new Account();
        
        System.out.println("账号:" + act1.getActno());
        System.out.println("余额:" + act1.getBalance());
    }

}

 

posted @ 2020-08-11 23:38  Lerresino  阅读(110)  评论(0)    收藏  举报