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());
}
}