Java--面向对象:封装、继承、多态

tech2022-12-12  102

一:什么面向对象

面向对象是一种编程思想,就是将我们的程序模块化,对象化;通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者,面向对象是基于面向过程而言的。 以前的编程是面向过程的,强调的是过程 !例如:1、打开冰箱 2、把大象放进去 3、关上冰箱 而现在面向对象强调的是结果! 例如:饿了,去平台点餐,这个动作就是面向对象

1.面向对象的三大特征:

封装性:把我们需要的对象的属性和方法封装成一个"类";<1、 提高安全性2、 提高重用性> (1)、 计算机语言是用来描述现实世界事物的。属性+行为 (2)、 那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。 分析手机事物: 属性:颜色,尺寸,品牌,价格。。。 方法:打电话,发短信,听音乐。。。。 类:手机类,抽取相同的属性和行为 对象:可以按照模板生产很多个手机,比如1号手机对象,包含特有的成员变量和成员方法

继承性:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 特点: (1)、 使用extends关键字 (2)、 java只支持单继承, 相当于子类把父类的功能复制了一份 (3)、 继承可以传递(爷爷,儿子,孙子的关系) (4)、 继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展 (5)、 不能继承父类的私有成员

多态:多态指同一个实体同时具有多种形式。它是面向对象的一个重要特征。 特点: (1)、 多态的前提是继承 (2)、 要有方法的重写 (3)、 父类引用指向子类对象,如:Animal a = new Dog(); – 小到大,向上转型 (4)、 多态中,编译看左边,运行看右边

对象在内存中的存储: 1、 一般来讲局部变量存在栈中,方法执行完毕内存就被释放 2、 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放 3、 每个堆内存的元素都有地址值 4、 对象中的属性都是有默认值的

1、 在栈内存中,创建一个引用变量p,持有对象的地址值 2、 在堆内存中,创建Person对象,并且开辟变量的空间,完成初始化 3、 给堆内存中的元素,分配一个唯一标志,地址值。交给p去保存。 4、 p.name=”lisi”;p.age=20;就去堆内存中找唯一的地址值,找到Person对象,并对其属 性进行修改赋值。 5、 p.eat();就去堆内存中找唯一的地址值,找到Person对象,执行Person对象的方法。

2.构造代码块& 局部代码块

构造代码块: 1、 在类的内部,方法外部,的代码块。 2、 通常用于抽取构造方法中的共性代码。 3、 每次调用构造方法前都会调用构造代码块 4、 优先于构造方法加载 局部代码块: 1、 在方法里面的代码块 2、 通常用于控制变量的作用范围,出了括号就失效 3、 变量的范围越小越好,成员变量会有线程安全问题 4、 总结:执行顺序:构造代码块是最优先的,局部代码块顺序执行

3.this和super关键字

不同点: 1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用 相同点: 1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

4.重载与重写的区别(Overload和Override的区别)

1、重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同 2、重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型 3、重写是父类与子类之间多态性的一种表现 4、重载是一类中多态性的一种表现

5.static关键字

1、 可以修饰成员变量,成员方法 2、 随着类的加载而加载,优先于对象加载 3、 只加载一次,就会一直存在,不再开辟新空间 4、 全局唯一,全局共享 5、 可以直接被类名调用 6、 静态只能调用静态,非静态可以随意调用 7、 static不能和this或者super共用,因为有static时可能还没有对象

6.静态代码块、构造代码块、局部代码块

静态代码块: 随着类的加载而加载,并且只被加载一次 构造代码块: 在调用构造方法前会自动调用,每次创建对象都会被调用 局部代码块: 方法里的代码块,方法被调用时才会执行 静态代码块: static{ },位置:在类里方法外 执行顺序: 静态 - 构造代码块 - 构造方法 - 局部

7.final关键字

1、 被final修饰的类,不能被继承 2、 被final修饰的方法,不能被重写 3、 被final修饰的变量是个常量,值不能被更改 <常量的定义形式: final 数据类型 常量名 = 值>

8.异常

Throwable - 顶级父类 Error: 系统错误,无法修复; Exception: 程序错误,可以修复; 程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出。 当调用了一个抛出异常的方法时,调用位置可以不做处理继续向上抛出也可以捕获异常。

1、捕获方式: try{ 需要捕获的代码 }catch(异常类型 异常名){ 处理方案 } 2、抛出方式: //在会发生异常的方法上添加代码:throws 异常类型 例如: public static void main(String[] args) throws Exception{

9.抽象类

没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。

例如: public abstract void eat();

特点 1、 通过java关键字abstract实现 2、 可以修饰方法或者类 3、 抽象类中可以没有抽象方法(由子类去实现) 4、 如果类中有抽象方法,那该类必须定义为一个抽象类 5、 子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写 6、 多用于多态中 7、 抽象类不可以被实例化 8、 抽象类里,可以有普通方法,也可以有抽象方法。

10.接口

Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。 特点 1、 接口中都是抽象方法, 没有构造方法 2、 通过interface关键字创建接口 3、 通过implements让子类来实 4、 可以理解成,接口是一个特殊的抽象类 5、 接口突破了java的单继承的局限性 6、 接口和类之间可以多实现,接口和接口之间可以多继承 7、 接口是对外暴露的规则,是一套开发规范 8、 接口提高了程序的功能扩展,降低了耦合性 9、 接口里没有成员变量,都是常量

//1、打破了java单继承的局限性,因为接口之间可以多继承,多个接口之间逗号隔开 interface Interface3 extends Interface1,Interface2{ void add(); } //3、接口还可以多实现吗??---可以多实现,只不过接口之间逗号隔开 class ManyImpl implements Interface1,Interface2{ public void save() {} public void update() {} public void get() {} public void delete() {} } //4、接口可以继承的同时,多实现?? -- class MoreImple extends ManyImpl implements Interface1,Interface2 { }
最新回复(0)