下面是学习面向对象的知识点和总结:

面向对象思想:

遇到需求,首先去找是否有现成的类来实现此功能,创建对象来调用,以此来组合成新的类实现自己的需求。

在java中是以类为单位,一个类包括成员变量、成员方法和构造方法

构造方法:创建对象的时候,由jvm自动调用,其中的作用是给成员变量赋值;不能用static关键字来修饰构造方法。

构造方法中也有return语句,只是一般不写;java中所有的方法中都有return语句,来进行出栈。

匿名对象:

public class Demo{
public void test(){}
}
// 利用匿名对象来调用Demo类
public class TestDemo{
public static void main(String args[]){
New Demo().test();
}
}

使用匿名对象的使用场景:就是这个对象只用一次,这样的场景非常方便。

封装:

封装的目的就是隐藏;

为了数据安全,或者隐藏方法的内部实现过程,对外提供特有的方法进行访问;

下面就是把成员变量隐藏起来,通过设置get,set来对数据进行设置和读取:

package com.xiaoshitou.demo1;

public class Person {
private String name;
private int age; 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;
}
}

  

继承:

继承:子类继承父类的非私有的成员(成员变量和成员方法),注意:构造方法是不能被继承的。

class A{
}
class B extends A{
}

  

类的继承只能是单一继承:也就是说一个子类只可以同时继承一个父类;

接口可以进行多重继承:一个接口可以同时继承多个接口

类可以进行多重继承:也就是说父类可以再继承其他的类

使用继承的时候:子类是父类的一种特殊情况的时候才使用继承;比如苹果是水果的其中一种,所有可以使用苹果类来继承水果类;

子类中有与父类同名的成员变量和方法时,可以使用super来调用父类的成员

super只能调用直接父类的成员,不能调用父类的父类的成员

方法的重写:

使用的场景:父类的方法不能满足子类的需求的时候,需要进行方法重写

子类和父类的方法一样时,当执行的时候,调用的是子类的方法,这就叫做重写

只有一般的方法才能重写,构造方法是不能被重写的

重写的格式:

1、方法名和参数列表必须相同

2、返回值一般要求相同,或者子类的返回值类型是父类方法返回值类型的子类

3、父类的方法有static修饰的时候,子类方法也必须用static修饰

4、子类方法 的权限不能比父类方法的权限低

子类实例化的过程:

JVM执行时,一旦遇到new关键字,就会到堆内存中开辟空间,得到这个空间的内存地址;

接下来根据类的成员,在堆中为类中成员变量分配空间,赋默认值;如果这个类有父类,则还要分配一块空间,用于保存父类中的成员变量;

再然后,就会调用相应的构造函数进栈执行;(也就是说,如果创建的是子类对象,此时调用的是子类的构造函数进栈);

构造函数进栈后,首先会执行一个隐式三步:

1、调用父类构造函数;(手动写,就是super(参数列表))默认调用的都是父类无参构造函数;

2、为对象中的成员变量显示初始化;

3、如果有构造代码块,执行构造代码块;

隐式三步都执行完毕,才开始执行构造函数中的代码;

当构造函数中的代码执行完毕后结束出栈,对象才算创建完成;

注意事项:

1、子类实例化,只会创建一个对象(就是子类对象),但是也会为父类成员变量分配空间;

2、子类构造函数执行时,会先执行父类构造函数,目的是给父类成员变量赋值;执行完父类构造函数才执行子类构造函数;

因为只是创建了一个子类的对象,所以如果调用的方法存在重写的情况下,就一定调用的是子类重写过的方法

创建子类的时候,调用父类的构造方法的原因是为了给父类的成员变量进行显示初始化

this和super关键字:

this代表当前调用的对象,所有的非静态成员方法和变量调用都需要依赖对象

this的作用:

1、区分局部变量和成员变量

2、在构造器方法中调用其他构造方法

在构造方法中调用其他构造方法时,必须把this(参数)放在第一行

super代表直接父类

当子类中的成员与父类同名时,可以用super来调用父类的成员

在子类的构造方法中可以使用super(参数)来调用父类的构造方法;如果不写默认会调用父类的无参数构造方法。

this和super调用构造方法时,不能同时存在,因为两个都必须放在第一行;当使用this来调用其他的构造方法时,是利用了间接的调用父类的构造方法

final关键字:

inal修饰类:该类不能被继承

final修饰方法:该方法不能被重写

final修饰变量:基本数据类型,成为了常量,不能被改变

       引用数据类型,对应指向对象的地址不能改变

final不能修饰构造方法

抽象类:

抽象类:抽象类不能创建对象,也就是说不能new,必须由子类来继承

一个类继承抽象类继承抽象类,必须全部重写抽象方法,否则该类还是抽象类

一个类中存在抽象方法,就这个类必须声明成抽象类

抽象类可以存在所有的成员(常用变量,成员方法,构造方法)

使用场景:

1、类中有抽象方法

2、不希望被创建对象

多态:

多态就是:父类的引用指向子类的对象;或者是接口的引用指向实现类的对象

多态的使用前提:两个类存在继承关系,或者接口和接口实现类的关系

好处:提高了程序的扩展性,代码的复用性

多态编译时,全部看父类

多态运行时,除了存在重写的非静态方法,运行子类重写的方法,其他全部运行父类的成员。

类型转换:

向上自动转型:多态就属于自动向上转型

强制向下转型:可以先使用instanceof判断然后再进行强制转换,否则容易出现类型转换异常

接口:

接口中只有成员变量和成员方法

成员变量默认的是:public static final

成员方法默认的是:  public abstract

这些修饰符可以写也可以不写,在编译的时候会自动加上

一个接口可以同时继承多个

一个类可以同时实现多个接口

类继承和实现可以同时进行,但是实现接口应该放在最后

注意:

不管是一个类实现多个接口,还是接口继承多个接口时,不能出现方法名和参数名相同,返回值类型不同的方法

接口和抽象类的使用场景:

  1. 抽象类:两个类存在继承关系
  2. 接口:两个事物不存在继承关系,主要用来定义规则,增加功能

static关键字:

类加载的过程:

包package:

权限修饰符:

内部类:

Java-面向对象总结的更多相关文章

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  4. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. 你说你精通CSS,真的吗?

    以前做项目的时候,学习了HTML和CSS,感觉这两个比较简单,在W3school里学习了一下之后,就觉得自己已经没问题了.可是,真正要做一个好看的页面,我还是要写好久.其实,对于CSS,我并没有像我以 ...

  2. PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例

    页面底部有PHP代码样例供测试使用. 1.PHP开发,你需要什么? 1)开发代码的工具,可以用IDE名字叫做phpDesigner.当然也可以临时用记事本代替,记得文件扩展名为.php 2)服务器(本 ...

  3. 拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient)

    作者:桂. 时间:2017-04-13  07:43:03 链接:http://www.cnblogs.com/xingshansi/p/6702188.html 声明:欢迎被转载,不过记得注明出处哦 ...

  4. mysql性能优化配置总结

    看了一些优化mysql运维的一些书籍,在此记录总结下:进入mysql客户端输入以下sql:1.连接设置 show variables like '%max_connection%'; show sta ...

  5. Java: 隐性赋值(Implicit Assignment)

    初学 Java 时,我总是记不住如何区别 i++ 和 ++i.在<算法(第四版)>一书中第16页,作者提到: ** ++i ** is the same as i = i+1, and h ...

  6. python练习_12

    题目:敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」.(11 ...

  7. MySQL存储过程_创建-调用

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的"脚本" 创建存储过程 调用存储过程 存储过程体 语句块标签 存储过程的参数 in:向过程里传参 out:过程向 ...

  8. Git下载、更新、提交使用总结

    Git使用总结 1.下载代码到本地 1.1指定存储文件路径 1.运行git-bash.exe 2.指定盘符:cd f:work 1.2下载代码 命令:$ git clone <版本库的网址> ...

  9. js闭包绑定元素

    闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状 ...

  10. C#集合之并发集合

    .NET 4 开始,在System.Collection.Concurrent中提供了几个线程安全的集合类.线程安全的集合可防止多个线程以相互冲突的方式访问集合. 为了对集合进行线程安全的访问,定义了 ...