面向对象分为:封装、多态、继承
面向对象——封装
面向:朝向、面对;即关注
对象:世间一切事物
面向对象/过程思想:把关注点放在某一物或是某一活动上,所涉及的人或物(也就是对象)/步骤(也就是过程)上的思想(或是思维方式)。
假设我要吃饭,执行面向对象的话,可以把对象指向他人,叫他人做饭,我负责吃就行。执行面向过程则是,我要具体化吃饭这一过程:买菜、洗菜、炒菜,最后吃。
类与对象
类:具有相同属性和行为(功能)的一系列事物,是一种抽象概念(手机)
对象:把类具体化,是一种具体概念(我手上的手机)
package itcast;
public class TestStudent {
public static void main(String[] args) {
Student a = new Student();
a.clas = "2020-5";
a.hour = 2;
a.name = "嘤嘤";
a.study();
/*private用法*/
// 设置值
a.setAge(23);
// 获取值
System.out.println(a.getAge);
}
}
package itcast;
import java.util.SplittableRandom;
/*这个是学生类,都给爷学!!!*/
public class Student {
//成员变量(类中,方法外)存在堆内,初始为null
String clas;// 班级(不能使用关键字)
String name;// 姓名
int hour;// 学习时长
//成员方法
public void study(){
// 括号中形参也叫局部变量
//局部变量(仅在方法内)存在栈内,要赋值
String clas = "5班";//局部变量,只要在方法体内的变量都叫局部变量
/*下面语句中,clas首先会用自己的局部变量(包括形参);没有的话找成员变量;也没有就找父类中的*/
System.out.println(clas +name+ "应学习"+hour+"小时");
}
// private一般用于修饰成员变量,被修饰的成员变量只允许在当前类中使用
// public一般用于修饰成员方法
private int age;
public void setAge(int a){age = a;}
public int getAge(){ return age;}
}
先定义好Student类,再创建TestStudent对象;
其实和前面的类中的调用是一样的,,只是所有的类都和main方法写在一起会很乱,所以这样分开写更清晰一些,还可以将同一个类建立到同一个包里,以此分类。这个过程就叫做封装
this用法
main方法:
package itcast;
public class TestStudent {
public static void main(String[] args) {
Student a = new Student();
a.study();
}
}
创建的类
package itcast;
import java.util.SplittableRandom;
/*这个是学生类,都给爷学!!!*/
public class Student {
//成员变量
private String clas = "6班";
//成员方法
public void study(){
String clas = "5班";
System.out.println(clas);
System.out.println(this.clas );
//在成员变量与局部变量重名时,可以用this来解决。
// 可以不加private
}
}
package itcast;
public class TestStudent {
public static void main(String[] args) {
Student a = new Student();
a.setAge(50);
a.getAge();
}
}
package itcast;
import java.util.SplittableRandom;
/*这个是学生类,都给爷学!!!*/
public class Student {
//成员变量
private int age = 20;
//成员方法
public void setAge(int age){
age = age;// 这里的age得到的是传参的50
System.out.println(age);
this.age = age;// 这样的话可以将传参与getAge相连接,使其拿到传参值50
}
public void getAge(){
System.out.println(age);//一开始这里的age打印的是成员变量20,加上this后为50
}
}
构造方法
构造方法名必须与类名相同;无返回值,但可以写return表示结束;无返回值类型,void也不可以。
有参构造和无参构造同时使用,或者仅用无参构造就行,不用再去封装的类中写明,系统会自动给出。构造方法可以重载
下面这个语句实际上就是一个无参构造
Student a = new Student();
相当于封装类中的
public Student(){}
构造方法还是要通过setXX和getXX输出
package itcast;
public class TestStudent {
public static void main(String[] args) {
//定义一个23岁的张三同学
//格式一:仅用无参构造
Student b = new Student();
b.setName("张三");
b.setAge(23);
System.out.println(b.getName());
System.out.println(b.getAge());
//格式二:简化格式一
Student c = new Student("张三",23);
System.out.println(c.getName());
System.out.println(c.getAge());
}
}
package itcast;
import java.util.SplittableRandom;
/*这个是学生类,都给爷学!!!*/
public class Student {
public Student(){}//无参构造
public Student(String name, int age){//有参构造
this.name = name;
this.age = age;
}
//成员变量
String name;
private int age = 20;
//成员方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
JavaBean类的标准定义
package itcast;
public class TestStudent0 {
public static void main(String[] args) {
//构造无参
Student0 b = new Student0();
b.setAge(27);
b.setName("小黄");
b.setGlass("电信班");
System.out.println(b.getGlass() + b.getName() + b.getAge());
// 构造全参
Student0 a = new Student0("小黄", 27, "电信小姐妹");
System.out.println(a.getGlass()+a.getName()+"今年"+a.getAge()+"岁");
}
}
package itcast;
public class Student0 {
/*标准的封装,提取处事物的共同属性和行为,放到一个类当中,
隐藏对象的属性和实现细节,仅对外提供公共的访问方式*/
//成员变量
private String name;
private int age;
private String glass;
//构造方法,无参构造,全参构造
public Student0(){}
public Student0(String name, int age, String glass){
this.name =name;
this.glass= glass;
this.age =age;
}
//成员方法
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setGlass(String glass){
this.glass = glass;
}
public String getGlass(){
return glass;
}
}