Java基础系列--05_面向对象

1、概述:
  (1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。
  (2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出来的对象去指挥。
    注意:这里所说的详细步骤,指的是问题的解决是如何进行的;而指挥,指的是对象去调用方法,
        而这个方法是实现了某一个功能的详细步骤。也就是说对象发号施令,而不理会内部是如何实现的
2、类与对象:
  类:是一组相关的属性和行为的集合。是一个抽象的概念,其实就是有共性的群体。
    成员变量:事物的属性
    成员方法:事物的行为
  对象:是该类事物的具体存在,是一个具体的实例,其实就是群体里面的个体。
    所有的类都是通过构造方法去创建出对象,这个过程也叫做实例化
  构造方法
    (1)格式及特点
      格式:
        访问权限修饰符 类名(参数...){}
      访问权限修饰符:
        public,private,不写(默认public)
      特点:
        A:方法名和类名相同
        B:没有返回值类型
        C:没有具体的返回值
    (2)注意事项:
      A:如果不给出构造方法,jvm会自动生成一个无参构造方法。
      B:如果给出了构造方法,jvm将不再提供无参构造方法。
        这个时候,如果要使用无参构造方法:只能自己写无参构造
3、this关键字
    (1)this代表当前类对象的引用。哪个对象调用方法,this就代表谁。
      this可以解决局部变量隐藏成员变量的问题。除了静态方法外,所有的方法中有隐含的有一个this引用
4、static关键字
  (1)表示静态的,可以修饰成员变量和成员方法。
  (2)静态的特点:
    A:随着类的加载而加载
    B:优先于对象存在
    C:被类的所有对象共享
    D:可以通过类名调用
  (3)静态的注意事项:
    A:在静态方法中是没有this关键字的。
    B:静态方法只能访问静态成员。
  (4)静态内容的调用:
    A:被对象调用
    B:被类名调用
  (5)什么时候该用static呢?
    当某个内容是所有对象共享。
  举例:
    水杯和饮水机:饮水机为共享资源,但水杯不是
    黑板和书包:黑板为功效资源,但书包不是
5、Java程序的开发,设计和特征
  (1)开发:就是不断的创建对象,通过对象调用功能
  (2)设计:就是管理和维护对象间的关系,使之尽量的低耦合,高内聚
  (3)面向对象的三大特征
    a:封装(encapsulation) 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    b:继承(inheritance) 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    c:多态(polymorphism) 将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
封装
  (1)隐藏实现的细节,提供公共的访问方式。
    类,方法等其实都是封装的具体体现。
  (2)private关键字
    A:用于修饰成员变量和成员方法。
    B:被修饰的内容在其他类中是不可以被访问的。
  (3)常见的应用:
    类中的所有成员变量私有,给出对应的get/set方法(属性)。
举例:

 1 class Student{
 2     //成员变量
 3     private String name;
 4     private int age;
 5     //无参构造
 6     public Student(){}
 7     //构造方法
 8     public Student(String name,int age){
 9         this.name = name;
10         this.age = age;
11     }
12
13     //属性(类中特殊的方法)
14     public void setName(String name) {
15         this.name = name;
16     }
17
18     public String getName(){
19         return name;
20     }
21
22     public void setAge(int age){
23         this.age = age;
24     }
25
26     public int getAge(){
27         return age;
28     }
29
30     //方法
31     public void study(){
32     System.out.println("好好学习,天天向上");
33     }
34 }
35         

继承
  (1)简单的说:把多个类中的相同的属性和行为进行抽取,封装到一个类中
    然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可,并拓展自己所需要的其他属性和行为
  (2)好处:
    A:提高代码的复用性。
    B:让类与类之间产生了一个关系,是多态的前提
  (3)继承的应用场景
    A:类之间存在着:
      is a 的关系,就可以考虑使用继承。  举例:Student is a Person

    B:不要为了继承部分功能,而去使用继承。
  (4)继承的特点:
    A:Java只支持单继承,不支持多继承。因为如果支持多继承,就会有调用不明确的问题。
    B:Java支持多层(重)继承
  (5)super和this的区别?
    A:super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)
    B:它和this的用法相似
      a:成员变量
        this.变量 -- 本类的
        super.变量 -- 父类的
      b:构造方法
        this(...) --   本类的
        super(...) --     父类的
      c:成员方法
        this.方法名() -- 本类的
        super.方法名() -- 父类的
  (6)子父类中成员变量的用法
    A:名称不同。
    B:名称相同,子类对象的在使用的时候:
      先找子类局部范围
      再找子类成员范围
      最后找父类成员范围
  (7)子父类中成员方法的用法:
    A:名称不同。
    B:名称相同,子类对象的在使用的时候:
      先找子类的
      再找父类的
    C:方法重写
      在子类中,方法声明(修饰符,返回值,方法名,参数列表)相同的情况
      注意事项:
        a:父类中私有方法是不能被重写
        b:子类方法的访问权限一定要大于等于父类的访问权限
        c:静态只能重写静态。(这个不能算,因为静态跟类相关)
  (8)子父类中构造方法的用法:
    A:子类的初始化过程中,首先会去执行父类的初始化动作。
      因为子类的构造方法中默认有一个super()。子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。
      所以,子类的初始化过程中,会先执行父类的初始化。
    B:如果父类没有无参构造方法
         a:使用super显示调用父类的带参构造。推荐方式。
      b:使用this调用本身的其他构造。

多态
  (1)对象在不同时刻表现出来的不同状态
  (2)多态的前提
    A:要有继承或者实现关系。
    B:要有方法的重写/实现。
    C:要有父类引用或者父接口引用指向子类对象。
  注意:多态有三种体现形式
    类多态
    抽象类多态
    接口多态
  (3)多态中的成员特点:
    A:成员变量
      编译看左边,运行看左边。

    B:成员方法
      编译看左边,运行看右边。

 1 class Person{
 2     private String name;
 3     private int age;
 4     public Student(){}
 5
 6
 7     public Student(String name,int age){
 8         this.name = name;
 9         this.age = age;
10     }
11
12
13     public void setName(String name){
14         this.name = name;
15     }
16
17
18     public String getName(){
19         return name;
20     }
21
22
23     public void setAge(int age){
24         this.age = age;
25     }
26
27
28     public int getAge() {
29         return age;
30     }
31
32     public void study(){
33         System.out.println("Person:"+name+"---"+age);
34     }
35 }
36
37 class Student extends Person{
38     private int stuNo;
39
40     public Student(){
41         super();
42     }
43
44
45     public Student(String name,int age,int stuNo){
46         super(name,age);
47         this.stuNo = stuNo;
48     }
49
50
51     public void setStuNo(int stuNo){
52         this.stuNo = stuNo;
53     }
54
55
56     public String getStuNo(){
57         return this.stuNo;
58     }
59
60
61     @OverRide
62     public void study(){
63         System.out.println("Student:"+name+"---"+age+"---"+stuNo);
64     }
65 }
66
67 public class ExtendsDemo{
68     public static void main(String[] args){
69         Person p = new Person("张三",20);
70         p.study();
71
72         Student s = new Student("李四",21,10001);
73         s.study();
74
75         Person pp = new Student("王五",21,10002);
76         pp.study();
77
78         Student ss = new Person("赵六",21);
79         ss.study();
80         ss = s;
81         ss.study();
82     }
83 }
84 //通过观察结果可以发现,真正的变量的值其实是等号右边的值
85 //而同一个ss对象可以表现出两种不一样的状态,就叫做多态
86        

    为什么会这样?因为方法存在重写,而变量没有。

  (4)多态的弊端:

    父类(接口)引用不能使用子类特有功能。
    为了解决这个弊端,我们需要向下转型。

    Person person = new Student(); //向上转型,子类对象转换为父类
    Student student = new Person(); //向下转型,父类对象转换为子类

  (5)多态的好处:
    可以提高代码的扩展性和可维护性。
  (6)类的存储
    A:栈 存储对象的名称 (s,ss, p, pp)
    B:堆 存放对象的具体内容(name的值,age的值,stuNo的值)
    C:方法区 存储类的字段以及方法(name,age,stuNO,study())

final关键字
  (1)是一个关键字,可以用于修饰类,成员变量,成员方法。
  (2)特点:
    它修饰的类不能被继承。
    它修饰的成员变量是一个常量,一旦被赋值了就不能修改。
    它修饰的成员方法是不能被子类重写的。

原文地址:https://www.cnblogs.com/CoderGan/p/10586143.html

时间: 2024-10-15 21:30:32

Java基础系列--05_面向对象的相关文章

《Java 基础系列》初步整理

<Java 基础系列>初步整理大概有 12 篇,主要内容为.: 抽象类和接口内部类修饰符装箱拆箱注解反射泛型异常集合IO字符串其他第一篇我们来聊聊抽象类和接口. "抽象类和接口"听起来是非常普遍的东西,有些朋友会觉得:这个太基础了吧,有啥好说的,你又来糊弄我. 这里写图片描述 事实上我在面试中不仅一次被问到相关的问题: 抽象类和接口之间的区别?什么时候创建抽象类?什么时候创建接口?设计框架时该如何选择?我比较喜欢这样的问题,答案可深可浅,体现了我们对日常工作的思考. 我们什

夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接口与抽象类的本质区别是什么? 基本语法区别 设计思想区别 如何回答面试题:接口和抽象类的区别? 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl

夯实Java基础系列9:深入理解Class类和Object类

目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); registerNatives()方法; Clone()方法实现浅拷贝 getClass()方法 equals()方法 hashCode()方法; toString()方法 wait() notify() notifAll() finalize()方法 CLass类和Object类的关系 参考文章 微信公众号 Ja

夯实Java基础系列13:深入理解Java中的泛型

目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star.Fork.Watch三连哈,感谢你的

Java基础知识:面向对象&类图

类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称.在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责.在定义类的时候,将类的职责分解成为类的属性和操作(即方法).类的属性即类的数据职责,类的操作即类的行为职责.设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分. 1.面向对象特性 1)抽象 2)继承 3)封装 4)多态 2.类图: 在软件系统

Java基础教程:面向对象编程

Java基础教程:面向对象编程 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台无关性.Java为解释型语言,编译器会把Java代码变成"""中间代码",然后在JVM上解释执行. 3.Java提供了很多内置的类库,这些类库简化了开发人员的程序设计工作,同时缩短了项目开发时间. 4.Java语言提供了对Web应用的支持. 5.Java语言提供了较好的安全性和健

Java基础教程:面向对象编程[2]

Java基础教程:面向对象编程[2] 三大特性 封装 封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法.封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 使用封装我们可以对成员变量进行更精确的控制,同时隐藏信息,实现细节等. 方法: public class Person{ private String name; private int age; ? public int getAge(){ return age;

夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 使用final修饰方法会提高速度和效率吗 使用final修饰变量会让变量的值不能被改变吗: 如何保证数组内部不被修改 final方法的三条规则 final 和 jvm的关系 写 final 域的重排序规则 读 final 域的重排序规则 如果 final 域是引用类型 参考文章 微信公众号 Jav

夯实Java基础系列7:一文读懂Java 代码块和执行顺序

目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块简介 Java代码块使用 局部代码块 构造代码块 静态代码块 Java代码块.构造方法(包含继承关系)的执行顺序 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github