面向对象的四大特征(非常重要)

面向对象的四大特征(非常重要)面向对象四大特征 抽象 封装 继承 多态 非常重要 1 抽象定义 抽象是将一类对象的共同特征总结出来构造类的过程 包括数据抽象和行为抽象两方面 抽象只关注对象的哪些属性和行为 并不关注这此行为的细节是什么 1 1 研究事物的静态特征 属性 1 2 研究事物的动态特征 方法 函数 1 3 形成结果 类 class 1 4 类和对象相互转变 new 举例说明 学生有姓名 有年龄 有身份证

面向对象四大特征:抽象,封装,继承,多态(非常重要)

1.抽象

定义:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么
1.1 研究事物的静态特征(属性)
1.2 研究事物的动态特征(方法/函数)
1.3 形成结果(类,class)
1.4 类和对象相互转变(new)
Student.java
public class Student { //1.1 研究事物的静态特征(属性) String name; int age; String cardNo; //1.2 研究事物的动态特征(方法/函数) /* * 吃饭 */ void eat(){ System.out.println("吃饭....."); } /* * 睡觉 */ void sleep(){ System.out.println("睡觉....."); } /* * 学习 */ void learn(){ System.out.println("学习....."); } public static void main(String[] args) { //声明一个学生类型的变量,指向内存当中学生的一个实例(1.3-1.4) Student s1 = new Student(); //类到对象 s1.name = "李四"; s1.age = 23; s1.cardNo = ""; System.out.println("姓名:"+s1.name+",年龄:"+s1.age+",身份证号:"+s1.cardNo); s1.eat(); s1.sleep(); } } 

2.封装

定义:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口.面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。封装给对象提供了隐藏内部特性和行为的能力,对象提供一些能这被其它对象访问的方法来改变它内部的数据。

2.1.提供构造方法(有了构造方法才能通过new去构建一个对象 1.构造方法必须和类名称一样2.构造方法不能有返回值)

空参构造系统默认存在,但是当你手动加入了有参构造,默认的空参构造将不再存在

 //空参构造 public Student(){ }; //有参构造 Student(String name){ this.name = name; System.out.println("初始化成功..."); } //有参构造 Student(String name,int age,String cardNo){ this.name = name; this.age = age; this.cardNo = cardNo; System.out.println("初始化成功..."); * //有了构造,在主方法中便可以创造对象 Student s1 = new Student(); 空参构造 Student s2 = new Student("王五"); //有参构造 Student s3 = new Student("赵六", 22, ""); //有参构造 } 

许许多多的构造方法形成了多态(重载),这个下边会讲到。

2.2 静态块(做的类的初始化的工作,执行在new之前)

静态块用于放创建对象前要做的一系列事情,比如说一个学生,首先要被孕育,然后出生…等等

static{ yunyu(); born(); } static void yunyu(){ System.out.println("孕育"); } static void born(){ System.out.println("出生"); } 

2.3 控制访问

在这里插入图片描述
具体情况具体分析

3.继承(关键字:extends)

目的:对父类和方法的复用

继承是从已有类得到继承信息创建新类的过程,继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段.子类继承父类属性(静态特征)和方法(动态特征),继承必须遵循封装当中的控制访问

package com.oracle.object.extend; / * 动物类 * @author * */ public class Animal { String name; int age; int sex; void eat(){ System.out.println(name + "is eating......................."); } void sleep(){ System.out.println(name + "is sleeping......................."); } } 

BuRuAnimal.java

package com.oracle.object.extend; public class BuRuAnimal extends Animal{ public static void main(String[] args) { BuRuAnimal zhangSan = new BuRuAnimal(); zhangSan.age = 21; zhangSan.name = "张三"; zhangSan.sex = 0; System.out.println(zhangSan.name + "的年龄是" + zhangSan.age + "岁,性别是:" + (zhangSan.sex == 0 ? "男" : "女")); zhangSan.eat(); zhangSan.sleep(); } } 

PaXingAnimal.java

package com.oracle.object.extend; public class PaXingAnimal extends Animal{ public static void main(String[] args) { PaXingAnimal paXingAnimal = new PaXingAnimal(); paXingAnimal.age = 10; paXingAnimal.name = "鳄鱼"; paXingAnimal.sex = 0; System.out.println(paXingAnimal.name + "的年龄是" + paXingAnimal.age + "岁,性别为:" + paXingAnimal.sex); paXingAnimal.eat(); paXingAnimal.sleep(); } } 

Person.java

package com.oracle.object.extend; public class Person extends BuRuAnimal{ String job; String jobAdress; void speak(){ System.out.println("speak................"); } public static void main(String[] args) { Person liSi = new Person(); liSi.age = 21; liSi.name = "李四"; liSi.sex = 0; System.out.println(liSi.name + "的年龄是" + liSi.age + "岁,性别是:" + (liSi.sex == 0 ? "男" : "女")); liSi.eat(); liSi.sleep(); } } 

从上边的代码中可看出,子类中不要再定义属性和行为,直接继承父类,便有了父类的属性和行为,注意:访问修饰符决定了是否可继承

4.多态

多态性是指允许相同或不同子类型的对象对同一消息作出不同响应

4.1 重载:同一个动作作用在同一个对象上拥有不同的解释 overload

重载又称静态多态,编译时多态 

4.2 重写:同一个动作作用在不同的对象上拥有不同的解释 override

重写又称动态多态,运行时多态 

狭义的多态指重写

多态(重写)的机制:

4.2.1 声明一个父类型的引用指向具体子类型的实例
Person p = new Student(); 
4.2.2 运行时才能绑定
Person p = new Student(); 解释一下非运行时绑定: Student s = new Student(); 
4.2.3 运行时可变
p = new Teacher(); p = new Junren(); 
package com.tao.object.extend; / * 图形类 * @author 天外飞星 * */ public class Shape { public Shape(){ } public Shape(int a){ this.a = a; } public Shape(int a,int b){ this.a = a; this.b = b; } protected int a; protected int b; / * 计算周长 * @return */ public double countZhouChang(){ System.out.println("计算周长"); return 0; } / * 计算面积 * @return */ public double countArea(){ System.out.println("计算面积"); return 0; } } 

Triangle.java

package com.tao.object.extend; / * 正三角形 * @author * */ public class Triangle extends Shape { public Triangle(){ } public Triangle(int a){ this.a = a; } //重写 / * 计算当前三角形的面积 */ public double countArea(){ return Math.pow(3, 0.5) / 4 * Math.pow(a, 2); } //重写 @Override public double countZhouChang() { // TODO Auto-generated method stub return 3*a; } //以下是重载的体现,都是求area但是,方法各不相同,即同一个动作作用在同一个对象上拥有不同的解释 / * 计算边长为b的三角形的面积 */ public double countArea(int b){ return Math.pow(3, 0.5) / 4 * Math.pow(b, 2); } / * 计算底为c,并且高为h的三角形的面积 */ public double countArea(int c,int h){ return 0.5 * c * h; } / * 计算边长为d,并且此边长与斜边的夹角为e的的三角形的面积 */ public double countArea(int d,double e){ return d / 2 * Math.sin(e) * d; } public static void main(String[] args) { Triangle triangle = new Triangle(); triangle.a = 10; //triangle.countArea(); //triangle.countZhouChang(); /*double area = triangle.countArea(); System.out.println(area);*/ //double area = triangle.countArea(20); //System.out.println(area); //System.out.println(triangle.countArea(10, 8)); System.out.println(triangle.countArea(10, Math.PI / 3)); } } 

Rectangle .java

package com.tao.object.extend; public class Rectangle extends Shape{ public Rectangle(){ } public Rectangle(int a,int b){ this.a = a; this.b = b; } } //重写 @Override public double countZhouChang() { return 2*(a+b); } @Override public double countArea() { // TODO Auto-generated method stub return a*b; } } 

Ring.java

package com.tao.object.extend; public class Ring extends Shape{ public Ring(){ } public Ring(int r){ this.a = r; } @Override public double countZhouChang() { // TODO Auto-generated method stub return 2*Math.PI*a; } @Override public double countArea() { // TODO Auto-generated method stub return Math.PI*Math.pow(a,2); } } 

test.java

package com.tao.object.extend; public class test { public static void main(String[] args) { //声明一个父类型的引用指向具体子类型的实例 Shape shape=new Triangle(10); double zhouchang =shape.countZhouChang(); System.out.println("三角形周长:"+zhouchang); double area=shape.countArea(); System.out.println("三角形面积:"+area); //不用重新声明局部变量,体现了运行时可变 shape=new Rectangle(10,20); zhouchang=shape.countZhouChang(); area=shape.countArea(); System.out.println("矩形周长:"+zhouchang); System.out.println("矩形面积:"+area); //不用重新声明局部变量,体现了运行时可变 shape=new Ring(10); zhouchang=shape.countZhouChang(); area=shape.countArea(); System.out.println("圆周长:"+zhouchang); System.out.println("圆面积:"+area); } } 

关注公众号,随时学习最新内容,并与博主零距离交流!
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228608.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:37
下一篇 2026年3月16日 下午6:38


相关推荐

  • Socker编程之TCP

    Socker编程之TCP一:TCP介绍TCP协议,传输控制协议(英语:TransmissionControlProtocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话””二:TCP特…

    2025年6月30日
    7
  • vim复制粘贴命令

    vim复制粘贴命令1.选定文本块。使用v进入可视模式,移动光标键选定内容。 2.复制的命令是y,即yank(提起),常用的命令如下:   y   在使用v模式选定了某一块的时候,复制选定块到缓冲区用;   yy  复制整行(nyy或者yny,复制n行,n为数字);   y^  复制当前到行头的内容;   y$  复制当前到行尾的内容;   yw  复制一个word(ny…

    2026年2月20日
    5
  • AI 漫剧画风搞不定?MJ+NBP=无限风格任选

    AI 漫剧画风搞不定?MJ+NBP=无限风格任选

    2026年3月15日
    2
  • Chrome插件推荐之Web Clipper

    Chrome插件推荐之Web ClipperChrome 插件推荐名称 WebClipper 作用 剪藏工具 可以使用它将网上的任何内容保存到任何地方 插件地址 https chrome google com webstore detail web clipper mhfbofiokmpp 官网 https clipper website 推荐理由 之前用有道云笔记的剪藏插件

    2026年3月17日
    2
  • Linux 服务器环境搭建及配置[通俗易懂]

    Linux常用命令查看进程: 方式一: ps-ef|grep端口号/名称 方式二: netstat-apn|grep端口号/名称杀死进程: kill-9PID使用vi或vim命令打开、关闭、保存文件1、vi&vim有两种工作模式:​ (1)命令模式:接受、执行vi&vim操作命令的模式,打开文件后的默认模式;​ (…

    2022年4月9日
    37
  • jquery拼音转汉字搜索[通俗易懂]

    jquery拼音转汉字搜索[通俗易懂]HTML:1DOCTYPEhtmlPUBLIC”-//W3C//DTDXHTML1.0Transitional//EN””http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>2htmlxmlns=”http://www.w3.org/1999/xhtml”>34head>5

    2022年7月24日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号