面向对象(OOP)与面向过程(POP)
面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
面向对象的三大特征:
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)
Java中用类class来描述事物:
属 性:对应类中的成员变量
行 为:对应类中的成员方法
1,我要开车去丽江,这句话包含的类和方法有什么?
类:我,车
方法:我{ 开车(丽江){}} 车{启动(){} 停止(){} 前进(){}后退(){} 拐弯(){}}
2,列车司机紧急刹车
类:司机 列车
方法:司机的方法:紧急刹车(){}
列车的方法:刹车(){}
3,你把门关上了
类:你,门
方法:你的方法:关(门){}
门的方法:开门(){} 关门(){}
类的语法格式
修饰符 class 类名 {
属性声明;
方法声明;
}
说明:修饰符public:类可以被任意访问
类的正文要用{ }括起来
举例:
public class Person {
//属性(成员变量),成员变量可以先声明不用初始化,类成员变量有默认值
String name;// String的默认值是null
int age;// int的默认值是0
//行为(方法或者函数)
/**
* 打印姓名
*/
public void showName() {//方法的名称如果是多个单词,首个单词首字母小写其他大写,即驼峰命名法
System.out.println("姓名"+name);
}
/**
* 获取年龄
* @return
*/
public int getAge() {//如果是一个有返回值的方法,那么方法体最后一行是返回相应的数据
return age;
}
}
public class Animal {
String name;
int eye;
int legs;
/**
* 输出动物的食物
* @param food 参数
*/
public void eat(String food) {
System.out.println("这种动物吃的是"+food);
}
/**
* 动物的移动方式
* @param moveType
*/
public void move(String moveType) {
System.out.println("这种动物的移动方式"+moveType);
}
}
对象的创建和使用
使用new +构造器创建一个新的对象;
使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
public class Test4 {
public static void main(String[] args) {
//实例化person类,也就是创建person对象
Person person = new Person();//声明一个person类型的变量,变量名person
//new person()就是实例化
person.name ="张三";//给person对象的name属性赋值
person.showName();//对象方法的调用
int i =person.getAge();//有返回值的方法,在调用后有一个值,这个值就是return那部分
System.out.println(i);
person.age=11;
int a =person.getAge();
System.out.println(a);
}
}
public class Test4 {
public static void main(String[] args) {
Animal ani =new Animal();
ani.eat("肉");
ani.move("飞");
}
}
//操作类的变量 调用类的方法
详解类的成员
属性:
语法格式:修饰符 类型 属性名 =初值
说明:修饰符private:该属性只能由该类的方法访问。
修饰符public:该属性可以被该类以外的方法访问。
类型:任何基本类型,如int、boolean或任何类。
public class Person1 {
public String name = "张三";
private int age ;//只能在本类下调用
public void showAge() {
System.out.println(age);
}
}
方法:
语法格式:
修饰符 返回值类型 方法名 ( 参数列表) {
方法体语句;
}
说明: 修饰符:public, private, protected等。
返回值类型:return语句传递返回值。没有返回值:void。
练习:编写教师类和学生类,并通过测试类创建对象进行测试
创建学生类
public class Student {
String name;//public String name 也行
int age;
String course;
String interest;
/**
* 显示学生信息
*/
public void showInfo() {
System.out.println("姓名:"+name);
System.out.println("年龄:"+"age");
System.out.println("课程:"+"course");
System.out.println("兴趣:"+interest);
}
}
测试类
public class Test4 {
public static void main(String[] args) {
Student s =new Student();
s.name="小明";
s.age=12;
s.course="语文,数学";
s.interest="打球,唱歌";
s.showInfo();
}
}
方法调用
public class Test4 {
public static void main(String[] args) {
Test4 t4 =new Test4();
int area=t4.getArea(4, 6);
System.out.println(area);
}
//方法有返回值的
public int getArea(int x , int y) {
return x+y;
}
}
关于对象
匿名对象:不需要赋值 new Person().showInfo()
1,创建一个Person类,其定义如下:(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
创建person2类
public class Person2 {
String name ;
int age;
int sex;
public void study() {
System.out.println("studying");
}
public void showAge() {
System.out.println("age");
}
public int addAge(int i) {
age+=i;
return age;
}
}
测试类功能
public class Test4 {
public static void main(String[] args) {
Person2 p =new Person2();
p.name ="lucy";
p.age=11;
p.sex=1;
p.study();
int a=p.addAge(2);
System.out.println("a: "+a+" p.age: "+p.age);
}
} //输出 studying
a: 13 p.age: 13
2,利用面向对象的编程方法,设计类Circle计算圆的面积。
创建Circle类
public class Circle {
public double area(double r) {
return 3.14* r* r;
}
}
public class Test4 {
public static void main(String[] args) {
double area=new Circle().area(2);
System.out.println("半径为2的面积是: "+area );
}
}
类的访问机制:
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过。)
在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
方法的重载(overload)
1,编写程序,定义三个重载方法并调用。方法名为mOL。
三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
在主类的main ()方法中分别用参数区别调用三个方法
public class Test4 {
public static void main(String[] args) {
Test4 t4 =new Test4();
t4.mOL(2);
t4.mOL(4, 5);
t4.mOL("sssss");
}
public void mOL (int i) {
System.out.println(i*i);
}
public void mOL ( int a, int b) {
System.out.println(a*b);
}
public void mOL (String s) {
System.out.println(s);
}
} //在主类main方法中调用三个方法
2,定义三个重载方法max()
第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,第三个方法求三个double值中的最大值,并分别调用三个方法****
public class Test4 {
public static void main(String[] args) {
Test4 t4 =new Test4();
t4.max(4, 9);
t4.max(1.5, 0.8);
t4.max(1.1, 5, 10);
}
public void max(int x,int y) {
if (x>y) {
System.out.println("最大值是: "+x);
}else {
System.out.println("最大值是: "+y);
}
}
public void max(double x,double y) {
double res =0;
if(x>y) {
res =x;
}else {
res=y;
}
System.out.println("最大值是: "+ res);
}
public void max(double x,double y,double z) {
double res=0;
if(x>y) {
if(x>z) {
res =x;
}else {
res=z;
}
}else {
if(x<z) {
res =z;
}else {
res =y;
}
}
System.out.println("最大值是:"+res);
}
} //最大值是: 9
最大值是: 1.5
最大值是:10.0