1. 面向对象的概念
面向对象:封装 -类内部行为自己控制,别人无法干涉 本身方法等 自身决定
面向对象:继承 子类复用父类的描述信息和行为 父类/基类:哺乳动物类 子类/派生类:人类
面向对象:多态 哺乳动物类:人类、马类 人类和马类 鸣叫行为不一样,称为多态
2.定义类
方法、变量小写开头。 类大写开头
成员变量是:private; 成员方法是:public ; 不要加static
public class Person {
private int age
;
private String name
;
public void setAge(int value
)
{
this.age
=value
;
}
public void setName(String value
)
{
this.name
=value
;
}
public void sayHello()
{
System
.out
.println("我的名字是"+this.name
+",我的年龄是"+this.age
);
}
}
3.对象的创建和调用方法
定义类的变量,指向初始化的对象,调用方法
public class Main {
public static void main(String
[] args
) {
Person p
=new Person();
p
.setAge(30);
p
.setName("小伟");
p
.sayHello();
}
}
4.对象之间是相互独立的
相同类的对象之间 或者不同类的对象之间都是相互独立的
public static void main(String
[] args
) {
Person p
=new Person();
p
.setAge(30);
p
.setName("小伟");
p
.sayHello();
Person p1
=new Person();
p1
.setAge(33);
p1
.setName("林志颖");
p1
.sayHello();
p
.sayHello();
5.通俗方法讲变量和对象
1个变量只能指向一个对象 如果变量指向对象变了,那么之前所指向对象的关系删除
public class Main {
public static void main(String
[] args
) {
Person p
=new Person();
p
.setAge(30);
p
.setName("小伟");
p
.sayHello();
Person p1
=new Person();
p1
.setAge(33);
p1
.setName("林志颖");
p1
.sayHello();
Person p2
=p1
;
p2
.setAge(66);
p2
.setName("周润发");
p2
.sayHello();
p1
.sayHello();
}
}
6 给方法传变量
传递给方法的参数变量本身是拷贝。 public class Main {
public static void main(String[] args) {
// 定义变量p 指向一个初始化对象
Person xiaowei=new Person();
//调用成员变量和成员方法
xiaowei.setAge(30);
xiaowei.setName("小伟");
xiaowei.sayHello();
//调用方法,改变变量的值
test(xiaowei);
xiaowei.sayHello();
}
// 定义一个方法,注意是要加static
static void test(Person p)
{
p=new Person();
p.setAge(888);
}
}
7成员变量和局部变量
必须初始化,对象初始化为null NullPointerException --空指针
8 深入理解this
Person 类
package com
.test
;
public class Person {
private int age
;
private String name
;
private int height
;
private String gender
;
public void setAge(int age
)
{
this.age
=age
;
}
public int getAge()
{
return this.age
;
}
public void setName(String name
)
{
this.name
=name
;
}
public String
getName()
{
return this.name
;
}
public void setHeight(int height
)
{
this.height
=height
;
}
public int getHeight()
{
return this.height
;
}
public void setGender(String gender
)
{
this.gender
=gender
;
}
public String
getGender()
{
return this.gender
;
}
public void sayHello()
{
System
.out
.println("my name is "+this.name
+",我的年龄是"+this.age
+",我的身高是"+this.height
+",我的性别是"+this.gender
);
}
public boolean isSamePeople(Person p
)
{
return this.age
==p
.age
&&this.name
.equals(p
.name
)
&& this.height
==p
.height
&&this.gender
.equals(p
.gender
);
}
}
main函数
package com
.test
;
public class Main {
public static void main(String
[] args
) {
Person p1
=new Person();
p1
.setAge(18);
p1
.setGender("girl");
p1
.setHeight(175);
p1
.setName("xiaowei");
p1
.sayHello();
Person p2
=new Person();
p2
.setAge(18);
p2
.setGender("girl");
p2
.setHeight(175);
p2
.setName("xiaowei");
p2
.sayHello();
Person p3
=new Person();
p3
.setAge(38);
p3
.setGender("boy");
p3
.setHeight(159);
p3
.setName("zhangsan");
p3
.sayHello();
System
.out
.println(p1
.isSamePeople(p2
));
System
.out
.println(p2
.isSamePeople(p3
));
}
}
9 private 和public
类中 成员变量一般用private 成员方法是public 成员变量的值设定或者取得一般用 set 和get public方法
10构造函数
构造函数 可以不定义,系统默认有一个无参构造函数。方法名和类名一致,没有返回值构造函数可在类中定义,public Person()构造函数可以重载,多个构造函数,参数类型或者个数不一致如果有有参构造函数,则类默认的无参构造函数不能用,除非新建无参构造函数构造函数一般用来赋初始值 构造函数:可以用来进行初始化值; get set 可以用来改变值。 不矛盾,可以配合使用
public class Person {
private int age
;
private String name
;
public Person()
{
System
.out
.println("定义构造函数");
}
public Person(int age
)
{
System
.out
.println("定义构造函数1");
this.age
=age
;
}
public Person(int age
,String name
)
{
System
.out
.println("定义构造函数2");
this.age
=age
;
this.name
=name
;
}
public void setAge(int age
)
{
this.age
=age
;
}
public int getAge()
{
return this.age
;
}
public void setName(String name
)
{
this.name
=name
;
}
public String
getName()
{
return this.name
;
}
public void sayHello()
{
System
.out
.println("my name is "+this.name
+",我的年龄是"+this.age
);
}
}
public class Main {
public static void main(String
[] args
) {
Person p1
=new Person();
p1
.sayHello();
Person p2
=new Person(15);
p2
.sayHello();
Person p3
=new Person(15,"zhangsan");
p3
.sayHello();
}
}
11 JavaBean 规范
如果成员变量希望外界赋值,提供set方法如果成员变量希望外界读取,提供get方法类必须是公共类,最多只能有1个public类必须有一个无参的构造函数成员变量privateboolean 类型成员变量 get方法 可以是is
12 对象和对象之间的关系
示例 Dog 类有性别和姓名 Person类 有年龄,身高以及Dog类的对象 Dog
public class Dog {
private String name
;
private String sex
;
public Dog()
{
}
public void setName(String name
)
{
this.name
=name
;
}
public String
getName()
{
return this.name
;
}
public String
getSex() {
return sex
;
}
public void setSex(String sex
) {
this.sex
= sex
;
}
public void sayhello()
{
System
.out
.println("i am one dog; my name is "+this.name
+",my sex is "+this.sex
);
}
}
Person
package com
.test
;
public class Person {
public Person() {
}
private int age
;
private int height
;
private String name
;
private Dog pet
;
public int getAge() {
return age
;
}
public void setAge(int age
) {
this.age
= age
;
}
public int getHeight() {
return height
;
}
public void setHeight(int height
) {
this.height
= height
;
}
public String
getName() {
return name
;
}
public void setName(String name
) {
this.name
= name
;
}
public void setPet(Dog pet
)
{
this.pet
=pet
;
}
public Dog
getPet() {
return this.pet
;
}
public void sayhello()
{
if(this.pet
==null
)
System
.out
.println("i am sorry");
else
System
.out
.println("my name is "+this.name
+",我的身高是"+this.height
+",我的年龄是"+this.age
+
"我的宠物名字是"+this.pet
.getName()+",我的宠物性别是"+this.pet
.getSex());
}
}
Main类
package com
.test
;
public class Main {
public static void main(String
[] args
) {
Person p1
=new Person();
p1
.setAge(33);
p1
.setHeight(180);
p1
.sayhello();
Dog d1
=new Dog();
d1
.setName("旺财");
d1
.setSex("girl");
p1
.setPet(d1
);
d1
.sayhello();
p1
.sayhello();
}
}
13 包
作用: 不同类放在不同包下面,比较好区分 重名类放在不同的包下面 包名小写 包名:公司名反着写:com.rupeng.crm.usr 类之间互相引用:import com.rupeng.com.*(不推荐) import com.rupeng.com.Person(推荐) import static 方法,直接调用:
import static java
.lang
.Math
.abs
;
public class Main {
public static void main(String
[] args
) {
int i
=abs(-3);
System
.out
.println(i
);
}
}