面向对象
1,什么是面向对象?
面向对象(Object Oriented,OO)是软件开发方法,是一种对现实世界理解和抽象的方法。
面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。
我们写程序就相当于OOP。
面向对象中有两个概念,类和对象,这两个可以理解为面向对象的一个基石。
马云说,要让天下没有难做的生意,那么面向对象的思想,就是让我们能够做到,天下没有难写的程序。
2,面向对象的三大特征1,封装性
2,继承性
3,多态性
类和对象
1,什么是类?
类,对某一类事物的抽象描述(抽象化),用于描述一组对象的共同特征和行为,例如,猫和狗,统称为动物。 人民币和美元,统称为货币。
2,什么是对象?(面向对象的核心,毕竟是面向对象嘛!)
对象,对于某类事物的具象描述(实例化),例如,人民币是货币的一种,猫是动物的一种。
3,类和对象之间的关系?
如上所述,类是对具有相同特征的对象的描述,而对象是对类的一种具体化的解释。
通俗点讲,包含与被包含的关系,Java是一种编程语言,编程语言中有Java这个分支。4,类的组成
类由成员变量和成员方法组成,其中成员变量(属性)可以理解为对对象特征的描述,成员方法(方法)可以理解为对对象行为的描述。
例如:人都有国家(属性),人都会花钱(行为),一个名词,一个动词。
public class Person {
String nationality;
void spendMoney() {
System.out.println("大家好,我今天花了" + nationality + "的钱");
}
}
5,对象的创建与使用
类名 对象名称 = new 类名();
eg:Person p1 = new Person();
其中:“new Person()” 用于创建Person的一个实例,p1相当于Person的一个引用,存储的是一个地址,指向内存的堆区中的Person实例。
通过对象的引用来访问对象的所由成员的格式:对象引用.对象成员
需要注意的是,成员变量(属性)如果不手动赋值的话,系统会默认为其赋值,根据其不同的类型,需要注意的是char类型的默认赋值为一个空字符,"\u0000"。
public class ObjectDemo {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.nationality = "中国";
System.out.println(p1.nationality);
p1.spendMoney();
p2.spendMoney();
}
}
结果:
中国
大家好,我今天花了中国的钱
大家好,我今天花了null的钱
6,类的封装
类的封装就是在定义一个类的时候,将类中的属性私有化,不让外部随意对其进行操作,外界需要对私有化对象操作的时候,需要调用类中有关私有属性的方法。通俗点讲,世界上有那么多国家,在中国(这个类中),只能消费人民币(私有化),美元在这不流通,那美国人在中国消费是不是需要把美刀兑换成人民币呢(外部操作)?所以中国提供了货币兑换(中国这个类提供的方法)。
//举个例子
class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age <= 0 || age > 150) {
System.out.println("你输入的年龄有问题,能不能长点心?");
} else {
this.age = age;
}
}
}
public class Demo1 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.setName("张三");
s1.setAge(20);
System.out.println("姓名:" + s1.getName() + ",年龄:" + s1.getAge());
s2.setName("李四");
s2.setAge(-10);
System.out.println("姓名:" + s2.getName() + ",年龄:" + s2.getAge());
}
}
7,通过上边的例子可以知道,我们在创建对象的时候,是需要new一下的,通过new调用类中的构造方法,那么什么是构造方法呢?
1,构造方法的定义
类中的一个特殊成员,在类实例化的时候自动被调用。
构造方法需要满足的条件:方法名和类名相同,无返回值类型,不能使用return返回值。
2,为何上边那么例子没有构造方法,却可以创建对象呢?
因为Java中,如果没有显示创建构造方法的话,那么系统会自动提供一个无参构造方法。但是如果显示创建之后,Java将不再提供。
简单点说,就是,你在中国出生,如果你爸妈不给你修改国籍的话,你就是一个中国人了,但是你爸妈主动给你修改了国籍,那么中国凭什么还要再给你提供中国国籍?一个道理。
3,既然是方法,那么就会有方法的重载,构造方法也一样,一个类中允许有多个构造,正如一个地球上,有多个国籍,可以选择。
4,构造方法不要使用private()修饰,修饰了之后,将无法通过该构造方法实例化对象。
class Student {
int age;
String name;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Demo1 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student("张三", 20);
System.out.println(s1.name + ":" + s1.age);
System.out.println(s2.name + ":" + s2.age);
}
}