Java面向对象——相关基本定义
Java面向对象——相关基本定义
摘要:本文简单介绍了面向对象的编程方式,以及与之有关的一些基本定义。
面向对象
什么是面向对象
面向对象编程是一种对现实世界建立计算机模型的一种编程方法。简称OOP(Object Oriented Programming)。
面向对象是一种编程思想,是一种思考问题的思维方式。
在现实世界中,当我们提到动物这个概念,实际上它是一个抽象的概念,而具体动物是指老虎,狮子,大象等等。
在对应的计算机模型中,我们把动物这种抽象的概念称之为Class,也就是类。而那些具体的对象称之为实例,并且用不同变量标识不同的实例。
面向对象和面向过程
面向过程与面向对象都是我们编程中,编写程序的一种思维方式。
面向过程的程序设计方式,是遇到一件事时,先做什么,再做什么,然后一步步实现的过程。
面向对象的程序设计方式,是遇到一件事时,先思考有哪些类和对象,然后思考类和对象里有哪些属性和方法,然后分析类和类之间的关系,最后一群对象合力能把事就好。
类和对象
定义
类是一组具有相同特征的对象的集合,是一个抽象的概念。类中定义了这一类对象所具有的静态属性(属性)和动态属性(方法)。
对象是一个类具体的某一个实例,是看得见摸得着的东西。世间存在的一切都可以看做是对象。
语法
定义类:
public class 类名 {
属性类型 属性名 = 属性值;
...
public void 方法名(int i) {
方法体;
}
...
public static void main(String[] args) {
主函数方法体;
}
}
定义对象:
类名 对象名 = new 类名();
this
说明:
为了解决全局变量和局部变量重名的问题,为了区分开全局变量和局部变量。
this代表的是当前类的对象,可以访问属性、访问访问方法、构造方法。
语法:
this.属性名;// 访问属性
this.方法名();// 访问方法
this(参数);// 访问构造方法
访问构造方法时,必须放在构造方法中,而且必须放在构造方法的第一句。
在一个构造方法中,不能多次调用其他构造方法。
super
说明:
表示子类中拿到的父类的引用(不是父类的对象)。
语法:
super.属性名;// 访问父类属性
super.方法名();// 访问父类方法
super(参数);// 访问父类构造方法
访问构造方法时,必须放在构造方法中,而且必须放在构造方法的第一句,在一个构造方法中只能有一个。
只能不能this一起出现。
类的加载机制
从父到子,静态先行。
父类的静态代码块,父类的代码块,父类的构造器,子类的静态代码块,子类的代码块,子类的构造器。
创建子类的顺序
先调用子类的构造方法。
子类中调用父类的构造方法。如果没有显式说明调用父类的哪个构造,则默认是调用父类的无参构造。如果显式说明了,则调用指定的父类的构造。
依次向上递推,一直到最上级。
接口
说明
接口可以理解成一种特殊的抽象类,里面全是抽象方法,它比抽象类层级更靠上。
接口相当于定义了一组规范。接口体现了程序设计的多态和高内聚低偶合的设计思想。
接口的定义使用interface关键字。
接口不能实例化。
好处
允许多继承、多实现,解决了前面Java中单继承缺陷。
灵活,解耦性高。
成员
没有构造方法。
没有普通的成员变量和成员方法,里面全是常量和抽象方法。
常量的修饰符默认是并且只能是(public static final)。
方法的修饰符默认是并且只能是(public abstract)。
类对接口的实现
类对接口的实现使用implement关键字完成,而且一个类可以实现多个接口。
语法: class A implements B, C { ... } 。
普通类必须实现里面所有的抽象方法,抽象类不用实现里面所有抽象方法。
重写接口的抽象方法,修饰符只能是public。
接口对接口的继承
接口对接口的继承使用extends关键字,而且一个接口可以继承多个接口。
语法: interface A extends B, C { ... } 。
包
包可以对程序员编写的代码文件进行目录层次的管理,解决了同一个项目中类名重复的问题。
在不同的包下的两个名字相同的两个类,会被编译器看做是不同的两个类。
命名规则
小圆点、数字、下划线、美元符,不能数字开头,不能是关键字。
一般由小写字母和小圆点组成,采用域名倒置的写法。
声明规则
必须在代码的第一行对包进行声明。
使用package关键字进行声明,语法是: package 包名; 。
如果没有声明包,则表示无包名。
一个Java文件中最多只能有一个包的声明。
导入规则
建议在包的声明下面导入包,实际上是导入包中的某个用到的类。
使用import关键字对包进行导入,语法是: import 包名.类名; 。
如果没有导入在当前类用到的类,那么在使用的时候需要写明用到的类所在的包名和类名,导入之后便可以只写类名。
一个Java文件中可以有多个导入。
比较重要的几个包
java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.net:包含执行与网络相关的操作的类和接口。
java.io:包含能提供多种输入/输出功能的类。
java.util:包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text:包含了一些Java格式化相关的类。
java.sql:包含了Java进行JDBC数据库编程相关的类。
java.awt:包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.applet:包含applet运行所需的一些类。
修饰符
访问修饰符
Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。
访问的意思是,其他类通过创建对象,可以调用。
Java提供了四种访问控制级别:
◆ public
public可以修饰类、方法、构造方法和接口。
父类中声明为public的方法在子类中也必须为public。
被public修饰的能够被任何其他类访问,如果不在同一个包中,则需要导入所在的包。
如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个Java源文件中有且只有一个public类。
◆ protected
protected不能修饰类和接口。
父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。
◆ 默认的
不使用任何修饰符声明的类、属性和方法,对同一个包内的类是可见的。接口里默认情况下访问权限为public。
父类中默认修饰符声明的方法,不能在子类中声明为private。
◆ private
被声明为private的变量、方法、构造方法和内部类只能被所属类访问,并且类和接口不能声明为private。
static
修饰类的成员(属性、方法、初始化块、内部类),但不能修饰构造方法。
被修饰的类的成员,称为静态成员,如(类)静态属性、(类)静态方法、静态初始化块、静态内部类。
用static修饰的成员,可以直接通过类名调用,比较简单。
用static修饰的方法,里面只能访问静态成员,不能访问非静态成员。
静态成员随着类的加载而加载,静态成员优先于普通成员而加载。只加载一次,普通成员随着对象创建而加载,可以加载多次。
所有对象都共享静态成员。
static修饰的方法中不能使用this或super。
final
可以修饰数据、方法、类。
修饰类,不能被继承,也称为太监类、最终类,比如String类就是最终类。
修饰方法,不能被重写,但可以被继承。
修饰局部变量和全局变量,都称为常量,一旦赋值,不能更改,保存在常量池。修饰的全局变量声明时必须赋值,要么在声明时,要么在所有构造方法,要么在初始化块。
如果常量类型为引用类型,指引用的对象不能更改,但对象的属性可以更改。
final往往和static搭配使用。
static和final的比较
相同:修饰的方法都只能在本类中被重载,不能被子类重写。
不同:
含义不同:static表示该成员要随类加载而加载。final表示该成员不可被修改。
修饰范围不同:static可修饰属性、方法、初始化块、静态内部类,不可修饰外部类、构造方法、非静态内部类。final可修饰属性、方法、类,不可修饰初始化块、构造方法。
abstract
可以修饰类和方法,但不能用来修饰属性,也不能修饰构造方法,也不能同final和static连接使用,也不能和private连用。
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。 如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类。
抽象类中可以有构造方法,创建子类的实例时可能会调用这些构造方法。
抽象方法不能被static修饰符修饰。因为static修饰的方法随类的加载而加载,而此时抽象类没有方法体。
抽象类及抽象方法不能被final修饰符修饰。因为抽象类允许创建其子类实现抽象方法,而用final修饰的类不允许拥有子类。
Java面向对象——相关基本定义的更多相关文章
- Java面向对象-方法的定义及简单使用
Java面向对象之方法 方法是对象的一部分,也称为行为: 先来一个简单实例: package com.java1234.chap03.sec03; public class Person { void ...
- Java之面向对象相关问题集
面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节. 抽 ...
- java面向对象(封装,继承,多态,抽象,接口的定义和实现)
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...
- JAVA面向对象之一
一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...
- Java面向对象一
一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20145221 《Java程序设计》实验报告二:Java面向对象程序设计
20145221 <Java程序设计>实验报告二:Java面向对象程序设计 实验要求 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
随机推荐
- react-native 标题随页面滚动显示和隐藏
效果图如下: 代码实现: import React, {Component} from 'react'; import { ScrollView, Text, View, FlatList, } fr ...
- C# Session 操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J. Ka Chang(树上分块+dfs序+线段树)
题意 链接:https://nanti.jisuanke.com/t/A1998 给出一个有根树(根是1),有n个结点.初始的时候每个结点的值都是0.下面有q个操作,操作有两种,操作1.将深度为L(根 ...
- 在execCommand formatBlock 'p'标签里增加class或id或css style?
<script> function CssFnctn() { document.execCommand('formatblock', false, 'p') va ...
- 4.Python网络编程_一般多线程创建步骤
#该程序使用命令行执行,IDE执行会有其他线程附加 import threading import time #初始化一个线程 #t=threading.Thread(target=func) #fu ...
- 【CF981F】Round Marriage(二分答案,hall定理)
传送门 题意: 给出一个长度为\(L\)的环,标号从\(0\)到\(L-1\). 之后给出\(n\)个新郎,\(n\)个新娘离起点的距离. 现在新郎.新娘要一一配对,但显然每一对新人的产生都会走一定的 ...
- python session保持登录,新增地址,并删除,由观察可知,address_id决定删除的内容;
import requests,reheaders={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) Ap ...
- pycharm 快速启动Django项目和python程序
Django 设置 *.py
- aiohttp_spider
aiohttp_spider_def: import asyncio import re import aiohttp import aiomysql from pyquery import PyQu ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第六-七周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>htt ...