博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java面向对象总结
阅读量:3948 次
发布时间:2019-05-24

本文共 3373 字,大约阅读时间需要 11 分钟。

Java面向对象

面向对象

三大特性:封装,继承,多态

面向过程:步骤清晰简单,第一步做什么,第二步做什么…

面向对象:分类的思维模式,思考问题首先会想解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。

##什么是面向对象?

面向对象编程(OOP)的本质:以类的方式组织代码,以对象的组织(封装)数据。

从代码的运行角度考虑是先有类后有对象,类是对象的模板。

##创建与初始化对象

使用new关键字创建对象
1.使用new关键字创建的时候,除了分配内存空间之外,还会给 创建好的对象 进行默认的初始化 以及对类中构造器的调用。
2.类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
“必须和类的名字相同”
“必须没有返回类型,也不能些void”

// A code blockvar foo = 'bar';
// An highlighted blockclass person(){
//一个类即使什么都不写,也会存在一个方法,也就是默认的构造器 String name; //idea快捷键:Alt + insert 快速写入构造器 //使用new关键字,本质上是在调用构造器 //用来初始化值 public Person(){
//默认构造器 } //有参构造:一旦定义了有参构造,无参就必须显示定义 public Person(String name){
this.name = name; } }public class demo{
public static void main(String[] args){
//new 实例化 了一个对象 Person person = new Person(); System.out.println(person.name); //null }}

封装

我们的程序设计要求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

通常,应该禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏(属性私有,再写get,set方法)

public class Student {
//属性私用 private int age; public int getAge() {
//get 方法获取这个数据 return age; } public void setAge(int age) {
//set 方法给这个数据设置值 if (age > 150 || age < 0){
System.out.println("设置年龄不合法!!!"); } else this.age = age; }
  • 封装的作用总结:
    1.提高程序的安全性,保护数据
    2.隐藏代码的实现细节
    3.统一接口
    4.系统可维护性增加了

继承

extends的意思是扩展,子类是父类的扩展。

Java中类只有单继承,没有多继承!
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。

super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中。
3.super和this不能同时调用构造方法

this VS super:

this:本身调用的这个对象
super:代表父类对象的应用
前提:
this:没有继承也能使用
super:只能在继承条件下才可以使用
构造方法:
this();本类的构造方法
super();父类的构造方法

重写(覆写):需要有继承关系,子类重写父类的方法,重写需要满足:

1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小 public >protected > default >private
4.抛出的异常:范围,可以被缩小,不能被扩大
重写,子类的方法和父类必须要一致;方法体不同;

为什么要需要重写?

父类的功能,子类不一定需要,或者不一定满足
覆写的IDEA快捷键:alt + insert : override

多态

同一方法可以根据发送对象的不同而采取多种不同的行为方式,一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(指父类或有关系的类)

多态存在的条件:

有继承关系
子类重写父类方法
父类引用指向子类对象

多态是方法的多态,属性没有多态

instanceof (类型转换)引用类型,判断一个对象是什么类型

final

final表示不可改变的含义

采用 final 修饰的类不能被继承
采用 final 修饰的方法不能被覆盖
采用 final 修饰的变量不能被修改
final 修饰的变量必须显示初始化
如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引用不能再次赋值,
但被指向的对象是可以修改的
构造方法不能被 final 修饰
会影响 JAVA 类的初始化:final 定义的静态常量调用时不会执行 java 的类初始化方法,
也就是说不会执行 static 代码块等相关语句,这是由 java 虚拟机规定的。我们不需要
了解的很深,有个概念就可以了。

抽象类

在 java 中采用 abstract 关键字定义的类就是抽象类,采用 abstract 关键字定义的方法就是抽象方法

抽象的方法只需在抽象类中,提供声明,不需要实现

如果一个类中含有抽象方法,那么这个类必须定义成抽象类

如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类中不复写该抽象方法,那么必须将此类再次声明为抽象类

抽象的类是不能实例化的,就像现实世界中人其实是抽象的,张三、李四才是具体的

抽象类不能被 final 修饰
抽象方法不能被 final 修饰,因为抽象方法就是被子类实现的

接口

接口我们可以看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量:

1) 在 java 中接口采用 interface 声明
2) 接口中的方法默认都是 public abstract 的,不能更改
3) 接口中的变量默认都是 public static final 类型的,不能更改,所以必须显示的初始化
4) 接口不能被实例化,接口中没有构造函数的概念
5) 接口之间可以继承,但接口之间不能实现
6) 接口中的方法只能通过类来实现,通过 implements 关键字
7) 如果一个类实现了接口,那么接口中所有的方法必须实现
8) 一类可以实现多个接口

接口和抽象类的区别?

a) 接口描述了方法的特征,不给出实现,一方面解决 java 的单继承问题,实现了强大
的可接插性
b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的
代码移植到抽象类中
c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)
d) 优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

内部类

实例内部类

创建实例内部类,外部类的实例必须已经创建

实例内部类会持有外部类的引用
实例内部不能定义 static 成员,只能定义实例成员

静态内部类

静态内部类不会持有外部的类的引用,创建时可以不用创建外部类

静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例
访问

局部内部类

局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样

局部内部类和实例内部类一致,不能包含静态成员

匿名内部类

是一种特殊的内部类,该类没有名字

在这里插入图片描述

转载地址:http://peqwi.baihongyu.com/

你可能感兴趣的文章
创新服务的七要素
查看>>
虚伪的奉承也有效
查看>>
蒂姆·库克的五项核心领导力
查看>>
你为何没有成为领导者
查看>>
一切悲剧都源于不当激励
查看>>
别把用户的高期望混同于好体验
查看>>
动机和机会:推动商业发展的引擎
查看>>
4个信号表明你是一个失败的领导
查看>>
成功谈判 你需要几个锦囊?
查看>>
一个人的宽度决定了他的高度
查看>>
善于拜访是另一种经营智慧
查看>>
打造新老员工双赢机制变对立为统一
查看>>
企业如何避免用错人
查看>>
打掉苹果“无与伦比”的傲慢(人民时评)
查看>>
Creating an Android Project
查看>>
Running Your App (android)
查看>>
Starting Another Activity
查看>>
Starting an Activity
查看>>
Stopping and Restarting an Activity
查看>>
Using the Support Library
查看>>