一:面向对象学习内容:
1.java 类及成员:属性、方法、构造器、代码块、内部类
2.面向对象三大特征:封装、继承、多态
3.其他关键字:this、super static、final、abstact、interface 、package、import
二:类与对象:
类:是对一类事务的描述,是抽象的概念上的定义
对象:是实际存在的该类事务的每个个体,因而也称instance)
注:面向对象程序设计的重点是类的设计,设计类就是设计类的成员
三:面向对象思想落地的实现规则:
1.创建类,设计类的成员
2.创建类的对象
3.通过 对象.属性 和对象.方法,调用对象结构
四:类的组成及实例化:
类由属性(成员变量)和方法(成员函数)组成
例1:创建人的类,并实例化调用
class Person{
String name;//属性1
int age;//属性2
//方法1
public void eat() {
System.out.println("人会吃饭!");
}
//方法2
public void practise(String sports) {
System.out.println("人会做"+sports+"运动!");
}
}
public class PersonDemo {
public static void main(String[]args) {
//对象实例化
Person p1 =new Person();
p1.name="tom";
p1.age=18;
System.out.println(p1.name);
System.out.println(p1.age);
p1.eat();
p1.practise("basskeball");
}
}
五:属性及局部变量的对比:
相同点:
1.1定义变量的格式: 数据类型 变量名=变量值;
1.2先声明,后使用
1.3 变量都有其对应的作用域
不同点:
1.1 在类的声明位置不一致:
属性直接定义在一对{}内,
局部变量:声明在方法内,方法形参,代码块内,构造器形参,构造器内部变量
1.2 关于权限修饰符不同:
属性:可以在声明属性时,指明其权限,使用权限修饰符修饰。
常用的权限修饰符:private public 缺省 protected
局部变量:不可以使用权限修饰符
1.3默认初始化值的情况:
属性:类的属性,根据其类型,都默认初始化值。
整型(byte short int long)0
浮点型(float double):0.0
字符型(char:0 或'\u0000')
布尔型(boolean:false)
引用数据类型(类、数组、接口:null)
局部变量:没默认初始化值。
意味着: 我们在调用局部变量前,一定要显示赋值
1.4 在内存中加载的位置:
属性:加载到堆空间中(非static)
局部变量:加载到栈空间
六:return 关键字:
1.使用范围:使用在方法体中
2.作用 1).结束方法
2)针对于返回值类型的方法,使用return 数据 方法返回所有的数据
注意点:return 关键字后面不可以声明执行语句
七:方法的重载:
在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同(和修饰符和返回值类型无关)
例:
int add(int x ,int b)
int add(int x,int y,int z)
double add(double a,double b)
八:权限修饰符:
java中的四种权限符:private 、缺省、protected、public
九:封装性:
软件设计 遵循高内聚、低耦合 ,隐藏具体实现细节,对外提供接口
类的封装性体现在 隐藏属性信息,通过方法 调用属性(实现关键字:private)
class Person{
String name;//属性1
int age;//属性2
//方法1
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
十:构造器:
构造器(constuctor)的作用是创建对象
1.如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
2.定义构造器的格式:权限修饰符 类名(形参列表){}
3.一个类中定义的多个构造器,彼此构成重载
class Person{
String name;//属性1
int age;//属性2
public Person() {
}
public Person(String n) {
this.name = n;
}
public Person(String n, int a) {
this.name = n;
this.age = a;
}
十一:this关键字:
this 表示当前对象,可以调用属性、方法 和构造器,this(参数)调用构造函数,必须放在首行
class Person{
String name;//属性1
int age;//属性2
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
十二: 综合例题:实现 客户、账号、银行 关系
//账号类
class Account{
private double balance;
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public Account(double balance) {
super();
this.balance = balance;
}
//存钱
public double deposit(double acct) {
if(acct<0) {
System.out.println("输入信息错误");
}
balance+=acct;
System.out.println("存钱成功" +acct);
return balance;
}
//取钱
public double withdraw(double acct){
if(acct>balance) {
System.out.println("余额不足");
}
balance-=acct;
System.out.println("取钱成功" +balance);
return balance;
}
//客户类
class Customer{
private String lastName;
private String firstName;
private Account acct;
public Customer(String lastName, String firstName) {
super();
this.lastName = lastName;
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Account getAcct() {
return acct;
}
public void setAcct(Account acct) {
this.acct = acct;
}
}
//银行类
class Bank{
private Customer[] customers;
private int numberOfCustomer;
public Bank() {
customers =new Customer[10];
}
public void addCustomer(Customer cust) {
customers[numberOfCustomer]=cust;
numberOfCustomer++;
}
public Customer getCustomer(int index) {
if(index>numberOfCustomer) {
return null;
}
return customers[index];
}
}
//测试类
public class ObjectTest {
public static void main(String []args) {
Bank bank =new Bank();
Customer cust =new Customer("jhone","smith");
bank.addCustomer(cust);
bank.getCustomer(0).setAcct(new Account(2000));
bank.getCustomer(0).getAcct().deposit(500);
System.out.println(bank.getCustomer(0).getAcct().getBalance());
}
}