java面向对象基础知识

一、面向对象与面向过程的区别:
①所处的角色不同:前者指挥者,后者执行者;②所需知道的事情不同:前者知道哪些是做这些事情的人就可以,不需了解具体的事情操作的过程。后者需要具备应有的技能来做这些事情。
二、面向对象的基本操作过程
指挥者采用面向对象思想,通过创建类,来创建统一的属性值【成员属性】和(做事的)方法【成员方法】。
通过创建的类或者jdk已有的类,来创建具体的对象,属性值明确,方法明确。
举例:创建类

 1 package com.oracle.demo02;
 2 
 3 public class Person {
 4     private String name;// 此时外部的类不能访问
 5     private int age;// 隐藏实现细节
 6     // 使用方法,提供接口进来的值 属性都私有化,并提供setXxx getXxx方法对其进行访问。
 7 
 8     public void setName(String name) {
 9         this.name = name;
10     }
11 
12     // 使用取值、、用于给出用户反馈
13     /*
14      * public String getName(){ return name; }
15      */
16     public void setAge(int a) {
17         if (a >= 0 && a < 149) {
18             age = a;
19         } else {
20             System.out.println("该年龄不可信");
21         }
22 
23     }
24 
25     public int getAge() {
26         System.out.println("get");
27         return age;
28     }
29 
30     public void speak() {// 方法可以被外界访问
31         // name.age此时为成员变量,非局部变量
32         System.out.println("我的名字是" + name + "今年" + age + "岁。");
33     }
34 
35     // 在person类中定义功能,判断两个人是否同龄人
36     public boolean people(Person p) {
37        return p.age==this.age;//此时的this,指的是谁调用该方法就是谁
38        //传入两个,一个通过调用传入,一个通过形参传入
39     }
40 }

View Code

举例:创建对象及方法的调用

 1 package com.oracle.demo02;
 2 
 3 public class Demo01 {
 4     public static void main(String[] args) {
 5         Person p = new Person();
 6         p.setName("张三");
 7         p.setAge(35);
 8         p.speak();
 9         Person p2 = new Person();
10         p2.setName("xiao张三");
11         p2.setAge(35);
12         p2.speak();
13         //比较两人是否为同龄人
14         boolean flag=p2.people(p);
15         System.out.println(flag);
16     }
17 }

View Code

1、创建冰箱的对象
冰箱 bx = new 冰箱();  
2、调用冰箱的功能
对象.功能()
bx.打开();
bx.存储(new 大象());
bx.关闭();
public class 类名 {
//可编写0n个属性 成员变量
    数据类型 变量名1
    数据类型 变量名2
//可编写0n个方法 成员方法
修饰符 返回值类型 方法名(参数){
执行语句;
}
}

注:此时的成员方法的修饰符为public,而在测试类main中修饰符为public static

三、对象调用方法内存图

 

 
四、类和对象的区别
前提:面向对象的思想力求在设计类的时候,其成员属性和成员方法与现实要求一致。
区别
对象
关系
抽象的,比如人类的皮肤属性,未有具体的值
具体的,通过类,new一个新的对象,给皮肤属性赋值(黑、白、黄)
五、局部变量和成员变量的区别
区别
成员变量
局部变量
写法位置
直接定义在类中
定义在方法或{}语句中
内存位置
在堆中保存,具有地址
在栈中保存
生命周期
随着对象的出现而出现,使用gc()垃圾回收机制清除
随着方法的出现而出现,随着方法的消失而消失
初始化值
成员变量出现在堆中,属性有默认值;例如int 0;Boolean FALSE;String null;
局部变量出现在栈中,必须人为赋值才能使用
 
六、基本数据类型和引用数据类型的参数传递
区别
基本数据类型
引用数据类型
 
传递的具体的值,在栈中存在,方法用完执行弹栈
传递地址,在堆中存在,方法和main中均指向同一个地址和对象
七、面向对象的三个特征:封装、继承、多态
封装
封装:将功能封装到方法(最基本的封装体)时,将方法封装到类中。
封装的优势:①提高代码的复用性,提高代码的可读性。②隐藏了实现实现 private(私有,权限修饰符),可以对外提供访问(通过set/get方法)。③保证了安全性。
在类中,成员变量,成员方法为存值,取值,判定,方法的调用、操作打印、流程控制等尽量在main中实现
举例:private是私有的一种体现形式
class Person {
// 私有成员变量
private int age;
private String name;
// 对外提供设置成员变量的方法
public void setAge(int a) {
// 由于是设置成员变量的值,这里可以加入数据的验证
if (a < 0 || a > 130) {
System.out.println(a + 不符合年龄的数据范围);
return;
}
age = a; 
}
// 对外提供访问成员变量的方法
public void getAge() {
return age;
}
}
this
变量
在类中方法
在方法中
相同名称的变量执行就近原则
代表类
谁调用了这个方法就代表谁,一般在赋值号的右边
 
继承的概念
Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。
注:此时同时会继承所有类的父类odject的属性和方法。
格式&使用
格式:
class 子类 extends 父类 {}
 
/*
 * 定义员工类Employee
 */
class Employee {
String name; // 定义name属性
// 定义员工的工作方法
public void work() {
System.out.println(尽心尽力地工作);
}
}
 
/*
 * 定义研发部员工类Developer 继承 员工类Employee
 */
class Developer extends Employee {
// 定义一个打印name的方法
public void printName() {
System.out.println(“name=” + name);
}
}
 
/*
 * 定义测试类
 */
public class Example01 {
public static void main(String[] args) {
Developer d = new Developer(); // 创建一个研发部员工类对象
d.name = 小明; // 为该员工类的name属性进行赋值
d.printName(); // 调用该员工的printName()方法
d.work(); // 调用Developer类继承来的work()方法
}
}

版权声明:本文为mlf19920916原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mlf19920916/p/12051412.html