概念:
所谓面向对象是一种编程思想,通过这种思想可以吧生活中的复杂事情变的简单化,从原来的执行者变成指挥者,面向对象是基于面向过程而言的,面对对象强调结果。
类与对象
定义:
所谓类,就是将具有相似的行为或者属性的事物抽象或者集合形成一个类,就如动物类,人类,植物类。
所谓对象,通常表现为实体,是类的具体实例,万物皆对象,比如动物类有猫狗这些等等
类与对象的关系。
对象是类的实例,类是对象的模板。
生活中的类与对象:
计算机语言是用来描述现实世界事物的。属性+行为,那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法,比如生活中有手机这个事物,手机具有的。
方法:打电话,发短信,听音乐
类:手机类,抽取属性和行为
对象:类与对象的创建和使用
通过class关键字创建类,通过new关键字创建对象。
类与对象在内存中的存储
java内存分为5大块,推,虚拟机栈,本地方法栈,方法区,程序计数器,我们基础阶段主要学习栈,推
一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是有默认值的
在栈内存中,创建一个引用变量p,持有对象的地址值
在堆内存中,创建Person对象,并且开辟变量的空间,完成初始化
给堆内存中的元素,分配一个唯一标志,地址值。交给p去保存。
p.name=”lisi”;p.age=20;就去堆内存中找唯一的地址值,找到Person对象,并对其属性进行修改赋值。
p.eat();就去堆内存中找唯一的地址值,找到Person对象,执行Person对象的方法。
封装
封装是指隐藏对象的属性和实现细节,由private关键字修饰,当一个类的属性或者方法不想让其他类访问时,可以用private修饰,仅仅对外提供公共的访问方式。由set(),get()方法提供,封装的好处是:
提高安全性
提高重用性
构造方法
定义
构造方法也叫构造函数,构造器,构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载,构造方法可以自己定义也可以使用系统提供的默认构造方法。
形式
可以无参也可以有参
练习
构造方法创建对象
构造方法对对象初始化
构造代码块和局部代码块
构造代码块
(1)在类的内部,方法的外部,的代码块 {}
(2) 通常用于抽取构造方法中的共性代码
(3) 每次调用构造方法前都会调用构造代码块,优先于构造方法执行
局部代码快
1、 在方法里面的代码块
2、 通常用于控制变量的作用范围,出了括号就失效
3、 变量的范围越小越好,成员变量会有线程安全问题
4、 总结:执行顺序:
构造代码块是最优先的,局部代码块顺序执行
this关键字
this表示当前对象的引用,比如引用当前对象的成员变量,成员方法
this可以防止成员变量与局部变量名字的冲突,当传入参数和成员变量名一样时可以使用
this关键字区分在构造函数中,this()必须在第一行,表示使用自身的构造方法,根据参数来匹配调用的构造函数
继承
概念
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类(子类),子类能继承已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类/超类/基类,只能继承一个父类,Java只支持单继承。
这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。提高复用性:只要继承父类,就能有一样的功能
特点
使用extends关键字
相当于子类把父类的功能复制了一份
java只支持单继承
继承可以传递(爷爷,儿子,孙子的关系)
不能继承父类的私有成员
继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展
static关键字
作用范围:可以修饰成员变量,成员方法,使用static修饰后属于类资源,而不再属于对象,随着类的加载而加载
特点:只加载一次,随着类的加载类的消失而消失,静态资源只能访问静态资源不能访问非静态资源,非静态资源既可以访问静态资源,又可以访问静态资源,static不能和this,super关键字一起使用,因为类存在时对象可能还没创建,并且static资源优先于对象存在
静态代码块:static修饰的代码块称为静态代码块
调用:可以直接使用类名调用,在本类中使用静态资源可以省略类名
多态
概述
多态,通常描述的是对象,即对象的不同状态 比如猫既有猫类自己的状态,又有动物类的状态,主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
对象构成多态的条件
必须要发生继承关系
必须存在方法的覆盖
必须有父类引用指向子类对象
多态的特点
抽象类
抽象方法
当不需要强调方法的具体实现细节,或者方法中没有具体实现意义,如动物类里面有个吃饭的方法,但是又不知道具体实现,可以将方法定义为抽象方法,抽象方法没有方法体,其具体实现由子类去重写。
抽象类
由abstract关键字修饰的类叫抽象类,抽象方法只能存在于抽象类中,抽象类中既有抽象方法,也可以有普通方法。
抽象类与抽象方法的特点
抽象类不可以创建对象(不能别实例化),由子类继承抽象类去实现抽象类里的方法
抽象类有构造方法,但是不可以创建对象,主要为子类提供多态功能
抽象方法没有方法体,并且只能存在于抽象类中
继承抽象类的类必须要重写抽象类里的所有抽象方法
public class Text1 {
public static void main(String[] args) {
Animal a = new Cat();
a.eat();
a.sleep();
a.catchFood();
System.out.println(a.age+a.name);
a.show();
}
}
class Animal{
int age;
String name;
Animal(){
this.age = 18;
this.name = "动物";
}
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void catchFood() {
System.out.println("捕食");
}
public static void show() {
System.out.println(1);
}
}
class Cat extends Animal{
public void eat() {
System.out.println("猫吃鱼");
}
public void sleep() {
System.out.println("猫睡觉");
}
public static void show() {
System.out.println(2);
}
}