面向对象
面向对象的概述
我们在编写C语言代码时都知道,每当我们需要完成一个功能时,都去要去书写这个功能过程中的每一步,写每一步是如何实现的。比如说写一个对数组排序的算法D,最基本的也需要通过两层for循环来实现,但是在面向对象的语言中,例如Java,只需要通过调用Arrays类的sort方法,然后传入一个数组,就可以得到排序后的数组,在这个过程中,我们不需要考虑,排序到底是如何进行的,这种过程就是面向对象。在生活中,这样的例子也很常见,比如我们自己用手洗衣服和让洗衣机帮我们洗衣服,以及我们自己在家做饭吃和去饭店下馆子等都是面向过程和面向对象的例子。
面向对象思想特点
面向过程:强调的是实现一个功能,所走的每一步
面向对象:强调的是对象,然后有对象去调用它的功能来完成一些任务。
1.这是一种更符合我们思考习惯的思想
2.通过调用对象可以将复杂的事情简单化
类和对象
类的定义
类是用来描述显示世界的事物的,是对一些具有共同属性和行为的事务的概括,比如在马路上跑的家用轿车,公交车,卡车都可以统一称为汽车,因为他们具有一些共同的属性和行为
属性:事物的描述信息
行为:事物能做什么
在Java中,使用class来描述类,其中的成员变量表示属性,成员方法表述事物的行为。
类和对象的关系
类:是一组相关属性和行为的集合
对象:对象是该类的具体体现。
比如:老虎,狮子都是动物类的具体体现。
package com.feng.object;
/**
* @Description TODO
* @Author Cautious-Xin
* @Date 2020/10/30 20:10
*/
public class Animal {
private String name;
private int age;
public Animal(String name, int age) { this.name = name;this.age = age; }
public Animal() { }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
public class Test1 {
public static void main(String[] args) {
Animal tiger = new Animal("老虎",5);
Animal lion = new Animal("狮子",3);
}
}
//在这里我们创建了一个动物类,以及它的两个实例化对象tiger和lion,下面我们将//以tiger为例,画出对象内存图
对象内存图
从图中可以看到,当 Animal tiger = new Animal(“老虎”,5);执行的时候产生了两个实例,其中tiger在堆内存中,我们可以称之为引用, new Animal(“老虎”,5)是在堆内存中创建一个对象,这两者具有相同的地址。
成员变量和局部变量的区别
1、在类中的位置不同:成员变量在类中方法外,局部变量在类中方法内。
2、初始化方式不同:成员变量不需要初始化,每个变量赋予对应类型的默认值,局部变量需要进行初始化赋值,不然会报错。
3、生命周期不同:局部变量随着方法的调用而产生,随着方法的结束而结束。成员变量随着对象的创建而产生,随着对象的结束而结束。
4、在内存中的位置不同:局部变量在栈中,成员变量在堆中。
包和访问权限
包的概述和定义
分包管理是组织软件项目结构的基本方式。我们将同类功能放到一个包中,方便管理。并且日常项目的分工也是以包作为边界。
包在文件系统中是以文件夹的形式存在的。类中定义的包必须与实际class文件所在的文件夹情况相统一,即定义包后,如果类在a包下,则生成的.class文件必须在a文件夹下,否则找不到类。
包的定义格式一般有四级
第一级:当前项目的性质
第二级:公司的名称
第三级:项目的名称
第四级:层的名称
类中的定义格式:package 包名;
类的全名:全类名 = 包名 + 类名
访问权限
java中主要提供了四种访问权限:public,protected,default,private
使用不同的访问权限修饰时,被修饰的内容会有不同的访问权限
public修饰方法和变量时
可以看出在四种情况下均不会出问题
protected修饰方法和变量时
可以发现在不同包下的无关类会出错。
default修饰方法和变量时
可以发现在不同包下的无关类和子类都会出错。
private修饰方法和变量时
除了本类其他全部报错
总结如下:
注意:
1、private 可以修饰成员方法和成员变量,不可以修饰类
2、protected可以修饰成员方法和成员变量,不可以修饰类
3、default可以修饰成员方法、成员变量和类
4、public可以修饰成员方法、成员变量和类
封装
封装概述
封装是面向对象三大特征之一。是面向对象语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外接无法直接操作和修改。
封装原则
将类中不需要对外的内容隐藏起来,通过提供公共的set和get方法对其进行访问。
构造方法
作用:创建对象,给对象的数据进行初始化
格式:
public 类名(){}
public 类名(参数列表){
this.参数=参数
....
}
构造方法注意事项:
1、若你不提供构造方法,系统会默认提供无惨构造
2、若你提供了构造方法,系统将不再提供。
3、构造方法也可以重载!!!!
package com.feng.right.test1;
/**
* @Description TODO
* @Author Cautious-Xin
* @Date 2020/10/30 20:41
*/
public class A {
private int num;
public A(int num) { this.num = num; }
public A() {}
@Override
public String toString() {
return "A{" +
"num=" + num +
'}';
}
}
public class Test {
public static void main(String[] args) {
A a1 = new A();//无惨构造方法
A a2 = new A(16);//有参构造方法
System.out.println(a1);//A{num=0}
System.out.println(a2);//A{num=16}
}
}