类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
类具有三个特性:封装、继承和多态。
三大特征:
-
封装:核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。
-
继承:子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。
-
多态:同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。
三大思想:
面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP
- OOA:面向对象分析(Object Oriented Analysis)
- OOD:面向对象设计(Object Oriented Design)
- OOP:面向对象程序(Object Oriented Programming )
类与对象:
(1)类是一类事务,是根据一般性抽象出来的;例如:人;动物.
-
类由属性和方法组成:
-
属性:就相当于人的一个个的特征
-
方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉
-
类名称 对象名称 = new 类名称() ;
- 访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:
- 访问类中的属性: 对象.属性 ;
- 调用类中的方法: 对象.方法(实际参数列表) ;
- 类必须编写在.java文件中;
- 一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类;
- .java文件的文件名必须与public修饰的类名完全一直;
- 同一个包中不能有重名的类;
(2)对象,是类的一个特例、实例。例如:小轿车、卡车、公共汽车等。对象通过new关键字,完成实例化(例如: Student stu = new Student() ; 。
(3)new关键字,其实本质就是申请分配内存,使Student类中的变量、方法都对应分配的内存单元。
面向过程和面向对象的区别:
面向过程 | 面向对象 | |
---|---|---|
区别 | 事物比较简单,可以用线性的思维去解决 | 事物比较负载,使用简单的线性思维无法解决 |
共同点 | 使用面向对象的思维 | 使用,面向过程来处理 |
优点: | 性能高,流程和步骤清晰,容易理解 | 易扩展、代码复用率高、利于后期扩展和维护,提升开发效率 |
不足: | 复用率低,扩展性差,维护难度高 | 一定程度上增加系统开销 |
面向对象程序设计的基本步骤:
- 发现类
- 发现类的属性
- 发现类的方法
类图:
类图以反映类的结构(属性,操作)及类之间的关系为主要目的,描述软件系统的结构,是一种静态建模的方法
类图包含如下三个组成部分:
- 定义的类名,如AppTree,Corn
- 类中属性,如AppleTree类中的name,brand等
- 类中方法,如print()方法
注意:"+“表示public ,”-“表示private,”#"表示protected
小结:
设计类是需要遵循的原则如下:
- 属性和方法是为了解决业务问题设置
- 关注主要属性和方法
- 如果没有必要,就不要增加额外的类,属性和方法
匿名对象:
- 没有对象名称的对象就是匿名对象。 即栈内存中没有名字,而堆内存中有对象。
- 匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收。
- 只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。
public static void main(String[] args){
//Math2 m=new Math2();
//int num=m.sum(100,200);
//不通过创建对象名,直接实例对象调用,这就是匿名对象。因为没有对象名指向对象,所以只能调用一次,然后被GC回收。
int num = new Math().sum(100,200);
System.out.println(num);
}
class Math2{
int sum(int x,int y){
return x+y;
}
}
构造方法(构造器)
-
构造方法的作用?
用于对象初始化
-
语法:Person p = new Person();
在右侧Person后面出现的小括号, 其实就是在调用构造方法
语法:
[访问修饰符]方法名([参数列表]){
//…省略方法体的代码
}
-
执行时机:
在创建对象时,自动调用
-
特点
-
所有的Java类中都会至少存在一个构造方法
-
如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码!
-
如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。
无参构造方法和有参构造方法:
- 无参构造方法: 生成初始化对象,属性都是默认值,系统默认提供
- 有参构造方法:生成初始化对象,属性都是实参提供,当你显示声明了有参构造方法
-
-
定义格式
-
与普通方法基本相同, 区别在于: 方法名称必须与类名相同, 没有返回值类型的声明 ;
-
建议自定义无参构造方法,不要对编译器形成依赖,避免错误发生。
-
当类中有非常量成员变量时,建议提供两个版本的构造方法,一个是无参构造方法,一个是全属性做参数的构造方法。
-
当类中所有成员变量都是常量或者没有成员变量时,建议不提供任何版本的构造。
-
/*
苹果树种类
*/
public class AppleTree {
public String name="苹果树"; //名称
public String brand;//品种
public int growTime=