继承
继承链
所有类的隐示父类都是Object
单继承
一个父类可以存在多个子类,一个子类只能有一个父类
super
表示存在继承的子类中,显式查找父类的信息。与之前this很像
this:代表调用者自己;super:代表调用者的父亲对象,只能使用不能破坏也看不到地址
super.属性:当子类与父类的属性同名,访问父类的属性
super.方法():当子类与父类的方法签名相同|重写,访问父类的方法
super():在子类的构造器首行,显式调用父类的构造器;任何的构造器默认是调用父类的空构造器
解决构造问题
方案1:使用确保父类空
方案2:子类的构造器必须调用父类的构造器,手动调用其他构造器
Override
Overload
重载:两同三不同 : 同一个类方法名相同, 形参类型 个数 顺序不同
override
重写: 子类中方法签名相同
static方法不会重写
私有方法不会重写
属性不会重写
debug 解决问题,排错
打断点
双击断点图标
观察变量与代码执行
f5:单步进入
f6:逐行执行
f7:单个方法|功能执行
f8:断电结束|下一个断点
封装
通过访问权限 各司其职 保护数据
访问权限
public 公开的公共的,都可以用
protected 受保护的(父类子类之间);合法继承,如果在不同包下,子类继承父类,那么父类中被protected修饰的那么只有子类可以使用
friendly|default 友好的默认的(空着); 家庭和睦 同一包下可以使用
private 私有的,只有本来可以使用
javabean
存储数据
空构造;属性私有化;set和get;重写equals和toString
各司其职
单例
* 1、私有的构造器
* 2、创建一个私有的静态的属性 对象供外部访问
* 3、提供公共的静态方法 访问该属性
单个实例,控制对象
构造私有化
代码
User
package shsxt.login;
/**
* 用户
* 姓名 学号
* @author zhuch
*
*/
public class User {
private String name;
private String studentNumber;
public String getName() {
return name;
}
public User() {
// TODO Auto-generated constructor stub
}
public void setName(String name) {
this.name = name;
}
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
@Override
public String toString() {
return "User [name=" + name + ", studentNumber=" + studentNumber + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((studentNumber == null) ? 0 : studentNumber.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (studentNumber == null) {
if (other.studentNumber != null)
return false;
} else if (!studentNumber.equals(other.studentNumber))
return false;
return true;
}
}
UserDao
package shsxt.login;
/**
* 往数据库添加数据
* @author zhuch
*
*/
public class UserDao {
public User getUser() {
User user=new User();
user.setName("zcp");
user.setStudentNumber("123");
return user;
}
}
UserService
package shsxt.login;
/**
* 业务逻辑
*/
public class UserService {
private UserDao userService;
public UserService() {
userService=new UserDao();
}
public boolean login(User user2){
User user=userService.getUser();
return user.equals(user2);
}
}
UserWeb
package shsxt.login;
import shsxt.util.MyUtil;
public class UserWeb {
private UserService userservice;
public UserWeb() {
userservice=new UserService();
}
public String input() {
String name=MyUtil.getStrFromConsole("请输入姓名:");
String studentNumber=MyUtil.getStrFromConsole("请输入学号:");
//拿到从键盘输入的值存到一个新的User对象中
User user=new User();
user.setName(name);
user.setStudentNumber(studentNumber);
//登入
boolean isSucceed=userservice.login(user);
return isSucceed?"登入成功":"登入失败,信息错误!";
}
}
UserApp
package shsxt.login;
public class UserApp {
public static void main(String[] args) {
UserWeb userweb=new UserWeb();
String str=userweb.input();
System.out.println(str);
}
}