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方法(属性)。
举例:

Java基础系列--05_面向对象Java基础系列--05_面向对象
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

View Code

继承
(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:成员方法
编译看左边,运行看右边。

Java基础系列--05_面向对象Java基础系列--05_面向对象
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

View Code

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

(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)特点:
它修饰的类不能被继承。
它修饰的成员变量是一个常量,一旦被赋值了就不能修改。
它修饰的成员方法是不能被子类重写的。

Original: https://www.cnblogs.com/zhenjungan/p/10586143.html
Author: zhenjungan
Title: Java基础系列–05_面向对象

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581898/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 红警快捷键图示

    最近,实验室的同学们 周末偶尔会玩一玩红警,回忆一下童年,挺愉快的。下面记录一下快捷键,方便操作; 看到B站上红警08,还有对应的快捷键教学视频,也可以直接学习一下; https:…

    Linux 2023年6月14日
    0127
  • 闭包、装饰器

    闭包: 闭包的演变过程: 闭包的概念: “闭包”的本质就是函数的嵌套定义,即在函数内部再定义函数 “闭包”有两种不同的方式,第一种是…

    Linux 2023年6月8日
    081
  • ipmitool for windows下载网址

    ipmitool for windows版本下载网址 http://ipmiutil.sourceforge.net/ Original: https://www.cnblogs….

    Linux 2023年6月7日
    0110
  • Ubuntu 进程 线程 查看 设置(top taskset)

    top 的基本使用 taskset 的基本使用 top top 详解 及 使用 top 常用的命令 taskset taskset 的基本使用 1. 显示某个进程(线程)运行所在的…

    Linux 2023年6月6日
    0118
  • CentOS7下安装python3.7

    以原码编译的方式安装 1.官网下载python3.7软件包 2.上传至Linux中,并解压 tar -zxvf python-3.7.2.tgz 3.安装gcc和python所需依…

    Linux 2023年6月6日
    085
  • Spring 4 集成 redis 实现缓存 二

    项目开发过程中经常用到mybatis,为了提升查询效率,mybatis支持一级和二级缓存,一级缓存基于SqlSession级别,默认开启,二级缓存基于Mapper级别;一级和二级缓…

    Linux 2023年6月14日
    099
  • Docker镜像安全的一些(初级)检测方法

    一些使用过的工具记录。 docker scan工具 这个是docker官方工具,参考文档:https://docs.docker.com/engine/scan/ 使用方法: 命令…

    Linux 2023年6月6日
    088
  • 清空Redis集群所有节点的数据工具

    FLUSHALL和FLUSHDB是单机命令,所以清空集群需要在所有Master节点上均执行一次。下载:https://github.com/eyjian/redis-tools/b…

    Linux 2023年5月28日
    0104
  • 【微服务】- Nacos-注册中心

    微服务 – 注册中心 – Nacos 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德…

    Linux 2023年6月6日
    0141
  • 旅游清单一步搭建,Angular助力你的踏春计划

    春天的脚步愈发临近,相信很多小伙伴已经开始规划自己的踏春计划了,无论是欣赏名胜古迹,还是走访风土人文,你都需要提前准备一份旅游清单!有了这款Angular旅游计划应用,从地点到预算…

    Linux 2023年6月13日
    0107
  • Java基础系列–03_Java中的方法描述

    Java的方法(函数)的描述 方法(1)方法的定义:就是完成特定功能的代码块。注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。(2)格式:修饰符 返回值类型 方法…

    Linux 2023年6月7日
    0114
  • 《闲扯Redis十一》Redis 有序集合对象底层实现

    一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开…

    Linux 2023年5月28日
    0100
  • Redis

    当你的才华不能撑起你的野心时,就是你该选择学习的时候了! Original: https://www.cnblogs.com/hofmann/p/16056013.htmlAuth…

    Linux 2023年5月28日
    086
  • Centos 7防火墙策略配置指南

    Centos 7防火墙策略配置指南 —— 清听凌雪慕忆 @ 1. 开启防火墙 1.1 user切换到root用户 1.2 查看防火墙服务状态 1.3 查看firewall的状态 1…

    Linux 2023年6月7日
    0151
  • USB_ModeSwitch for Android 7

    测试步骤: 2.运行命令 adb shell usbmodeswitch -W -v 12d1 -p 1f01 -M ‘555342431234567800000000…

    Linux 2023年6月7日
    078
  • 1.1 操作系统是什么,操作系统概述

    好的开始是成功的一半。学习 Linux 的第一个问题是搞明白 Linux 是什么,了解其来龙去脉、前世今生,知道其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知…

    Linux 2023年5月27日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球