Java基础篇——三大特性(多态)

这是Java三大特性的最后一篇文章,本篇主要讲解多态的概念和应用。如果是对Java有兴趣的小伙伴可以关注一下,后续会推出一系列的Java基础和进阶的总结(或者说是个人的理解吧!)可以让你学到一些基础但是又非常实用的东西,基本上都是自己的一些理解和实践结果,对于新手来说可以避免走弯路(后期会出Java的其他重要的内容)也欢迎各位大佬和我讨论Java的一些问题。

Java基础篇——三大特性(封装):Java基础篇——三大特性(封装)_叶玉恒的博客-CSDN博客_java三大特性封装

Java基础篇——三大特性(继承):Java基础篇——三大特性(继承)_叶玉恒的博客-CSDN博客

                                                                  养成习惯先点赞后观看!!!! 

                                                                              正式开始这一次的分享

                                           

目录

多态的概念

多态实现的条件

多态中重写的基本规则

多态的具体实例

例一:

例二:

例三: 

例四:

多态的优点

总结 

后言 

多态的概念

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,就像下面的图一样:(不同的打印机打印出来了不同的效果)

                                        

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
       对面向对象来说,多态分为编译时多态运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。 

具体的几个生活中的例子

在实际登陆系统中,有几种情况,一种是系统管理人员,一种是客户,一种是系统的用户。我们在前面只道定义一个人来使用系统。但是后面到后台又会具体判断使用系统的人到底是什么人,属这就是多态的实际意义。 

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持

多态实现的条件

       实现多态的条件有:继承、重写和向上转型

  • 继承:在多态中必须存在有继承关系的子类和父类。
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法,如果没有重写的话在父类中就会调用。当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。要想调用父类中被重写的方法,则必须使用关键字 super
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。  

继承在前面已经给出了链接不是很清楚的小伙伴可以返回去看一下, 重写就是在继承中的子类重新定义了父类中的方法,向上转型在继承中就是【父类 名称=new 子类()】类似这种格式的初始化对象就是会产生向上转型这个现象(后面的例子中会具体的指出)。

多态中重写的基本规则

  1. 参数必须要一样,且返回类型必须兼容

    重写是派生类对基类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

    基类定义出其他的程序代码要如何使用方法。不管基类使用了哪种参数,覆盖此方法的派生类也一定要使用相同的参数。同样,不论基类声明的返回类型是什么,派生类必须要声明返回一样的类型或该类型的派生类。要记得,派生类对象必须保证可以执行基类的一切

  2. 不能降低方法存取的极限

    简而言之,方法和变量的存取权必须相同或者更为开放。

    例如不能把public的方法降低为private。

  3. 基类的成员方法只能被它的派生类重写。

  4. 声明为 final 的方法不能被重写。

  5. 声明为 static 的方法不能被重写,但是能够被再次声明。

  6. 构造方法不能被重写。

  7. 如果不能继承一个方法,那么它一定不能被重写

  8. 当需要在派生类中调用基类的被重写方法时,要使用 super 关键字。

多态的具体实例

例一:

最简单的多态(构造器中的多态):在同一个名字的构造器中使用不同的参数可以得到不同的结果,这就是最简单易懂的多态了吧!

public class People {
	People(){
		System.out.println("构造器一");
	}
	
    People(int age){
    	System.out.println("构造器二:年龄为"+age);
	}
    
    People(String name,int age){
    	System.out.println("构造器三:姓名为"+name+" 年龄为:"+age);
    }
    
    public static void main(String[] args) {
		// TODO Auto-generated method stub
        @SuppressWarnings("unused")
		People p1=new People();
        @SuppressWarnings("unused")
		People p2=new People(12);
        @SuppressWarnings("unused")
		People p3=new People("YYH",12);
	}
}

OUTPUT:
构造器一
构造器二:年龄为12
构造器三:姓名为YYH 年龄为:12

例二:

public class Person {
    public void drink(){
        System.out.println("人喝水");
    }
    public void eat() {
    	System.out.println("人吃东西");
    }
}


class Man extends Person{
    public void drink(){
        System.out.println("男人喝水");
    }
}
public class Test {
    public static void main(String[] args) {
    	//子类对象的多态性:父类的引用指向子类对象
        Person p=new Man();            //向上转型
        //虚拟方法调用:通过父类的引用指向子类对象的实体,调用方法时,实际执行子类重写父类的方法
        p.drink();
        p.eat();
  } 
}
OUTPUT:
男人喝水
人吃东西

 小知识:虚拟方法的存在是为了多态。Java 中其实没有虚拟方法的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

在向上转型的过程中,发现子类中重写了drink方法,然后就会调用子类中重写过的方法,所以输出了“男人喝水”,在子类中没有重写eat方法所以就会调用父类中的eat方法。

也就是:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

例三: 

这个例子比较的经典,引用其他博主的文章(在上一篇的继承文章中也有提到),个人觉得要是这个例子理解了以后,继承和多态的基础就基本掌握了。

class A {
    public String show(D obj) {
        return ("A and D");
    }
    public String show(A obj) {
        return ("A and A");
    } 

}
class B extends A{
	//重载
	
    public String show(B obj){
        return ("B and B");
    }
  //重写
    public String show(A obj){
        return ("B and A");
    } 

}
class C extends B{}
class D extends B{}
public class t {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();                             //1.只能调用子类中重写父类的方法,不可以调用重载的方法
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println("1--" + a1.show(b));
        System.out.println("2--" + a1.show(c));
        System.out.println("3--" + a1.show(d));
        System.out.println("--------");
        System.out.println("4--" + a2.show(b));
        System.out.println("5--" + a2.show(c));
        System.out.println("6--" + a2.show(d));
        System.out.println("6--" + a2.show(a1));
        System.out.println("*");
        System.out.println("7--" + b.show(b));
        System.out.println("8--" + b.show(c));
        System.out.println("9--" + b.show(d));      
    }
}
OUTPUT:
1--A and A
2--A and A
3--A and D
--------
4--B and A
5--B and A
6--A and D
6--B and A
*
7--B and B
8--B and B
9--A and D

 

重点:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法,但是它仍然要根据继承链中方法调用的优先级来确认方法,该优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)

例四:

     继承和运行时的多态

1.创建 Figure 父类,在该类中首先定义存储二维对象的尺寸,然后定义有两个参数的构造方法,最后添加 area() 方法,该方法计算对象的面积。代码如下:

package Polymorphic;

public class Figure {
	double dim1;
    double dim2;

    Figure(double d1, double d2) {
                                         //有参的构造方法
        this.dim1 = d1;
        this.dim2 = d2;
    }

    double area() {
        // 用于计算对象的面积,父类中没有实际意义,需要在子类中重写
        return 0;
    }
}

 2.创建继承自 Figure 类的 Rectangle 子类,该类调用父类的构造方法,并且重写父类中的 area() 方法。代码如下:

package Polymorphic;

public class Rectangle extends Figure{
	Rectangle(double d1, double d2) {
        super(d1, d2);
    }

    double area() {
        System.out.println("长方形的面积:");
        return super.dim1 * super.dim2;
    }
}

3.创建继承自 Figure 类的 Triangle 子类,该类与 Rectangle 相似。调用父类的构造方法,并且重写父类中的 area() 方法。代码如下:

package Polymorphic;

public class Triangle extends Figure {
	Triangle(double d1, double d2) {
        super(d1, d2);
    }

    double area() {
        System.out.println("三角形的面积:");
        return super.dim1 * super.dim2 / 2;
    }
}

4.创建 Ftest 测试类,在该类的 main() 方法中首先声明 Figure 类的变量 figure,然后分别为 figure 变量指定不同的对象,并调用这些对象的 area() 方法。代码如下:

package Polymorphic;

public class Ftest {
	public static void main(String[] args) {
		Figure figure; // 声明Figure类的变量
        figure = new Rectangle(9, 9);
        System.out.println(figure.area());
        System.out.println("===============================");
        figure = new Triangle(6, 8);
        System.out.println(figure.area());
        System.out.println("===============================");
        figure = new Figure(10, 10);
        System.out.println(figure.area());
	}
}

从上述代码可以发现,无论 figure 变量的对象是 Rectangle 还是 Triangle,它们都是 Figure 类的子类,因此可以向上转型为该类,从而实现多态。

5.执行上述代码,输出结果如下:

详细转载于:Java多态性:Java什么是多态?

OUTPUT:
长方形的面积:
81.0
===============================
三角形的面积:
24.0
===============================
父类中计算对象面积的方法,没有实际意义,需要在子类中重写。
0.0

看完例子现在是不是:

                                                                  

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

总结 

多态简单理解就是同个东西在某些特定的情况下面可以出现不同的结果,在继承中配合向上转型可以实现很功能,我们需要好好的学习多态,毕竟在后面做工程中用到的还是很多的。

多态结合继承和封装可以做出不一样的东西大大的简便了程序的可读性,三者其实是一体的谁也离不开谁,所以我们需要一起掌握封装,继承和多态这Java三大特点。

后言

这些都是自己翻阅资料或者是查看其他大佬的blog总结的,如有侵权请告知!!!如有错误请指出,谢谢。希望对你们有所帮助,本人也正在学习Java的路上也是小白一枚,还需要大佬们的多多支持。

整理不易,点赞支持!!!

                                                                    

 No pains No results

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
第1部分 基础 第1堂课 java概述 3 视频讲解:31分钟 1.1 java简介 4 1.1.1 java发展历史 4 1.1.2 java的几个版本 5 1.1.3 java应用领域 6 1.1.4 java项目成功案例 6 1.1.5 怎样学好java 8 1.2 环境搭建 8 1.2.1 jdk下载 8 1.2.2 jdk安装 10 1.2.3 配置环境变量 11 1.3 编写第一个java程序 14 1.3.1 在记事本中输入代码 14 1.3.2 保存代码为源代码文件 15 1.3.3 编译并运行java文件 16 1.4 照猫画虎——基本功训练 16 1.4.1 基本功训练1——更换java_home环境变量 16 1.4.2 基本功训练2——提取path变量值创建新环境变量 17 1.4.3 基本功训练3——输出字符表情 17 1.4.4 基本功训练4——输出“*”字符组成的三角形 18 1.5 情景应用——拓展与实践 19 1.5.1 情景应用1——计算两个整数的和 19 1.5.2 情景应用2——输出当前日期 19 1.5.3 情景应用3——在控制台接收用户输入数字 20 1.5.4 情景应用4——计算用户输入数字的乘积 21 1.6 自我测试 22 1.7 行动指南 23 1.8 成功可以复制——“盖茨第二” 23 第2堂课 使用ide集成开发工具 25 视频讲解:128分钟 2.1 eclipse简介 26 2.2 eclipse下载与安装 26 2.2.1 eclipse分 26 2.2.2 下载eclipse 26 2.2.3 安装中文语言包 28 2.2.4 启动eclipse 29 2.3 安装界面设计器 30 2.4 熟悉eclipse 32 2.4.1 eclipse工作台 32 2.4.2 透视图与视图 33 2.4.3 包资源管理器视图 33 2.4.4 编辑器视图 33 2.4.5 控制台 34 2.4.6 大纲视图 34 2.4.7 问题视图 34 2.4.8 透视图工具栏 35 2.4.9 视图工具栏 35 2.4.10 快速视图工具栏 35 2.5 如何开发java程序 35 2.5.1 新建java项目 36 2.5.2 新建java 36 2.5.3 编写java代码 37 2.5.4 运行java程序 39 2.6 如何开发桌面应用程序 39 2.6.1 新建swing gui窗体 40 2.6.2 向窗体中添加gui控件 41 2.6.3 实现控件的事件监听器 43 2.6.4 运行gui程序 43 2.7 如何进行程序调试 43 2.7.1 设置断点 44 2.7.2 以调试方式运行java程序 44 2.7.3 程序调试 44 2.8 了解项目库 45 2.9 照猫画虎——基本功训练 46 2.9.1 基本功训练1——添加jar文件到构建路径 46 2.9.2 基本功训练2——添加依赖项目到构建路径 46 2.9.3 基本功训练3——创建用户自定义库 47 2.9.4 基本功训练4——为项目添加库 48 2.9.5 基本功训练5——为项目添加文件夹 49 2.10 情景应用——拓展与实践 50 2.10.1 情景应用1——为窗体添加文本框控件 50 2.10.2 情景应用2——接收用户在控制台的输入 50 2.10.3 情景应用3——编写一个信息提示窗体 51 2.10.4 情景应用4——控制窗体位置 52 2.10.5 情景应用5——编写ui界面的加法 计算器 54 2.11 自我测试 55 2.12 行动指南 56 2.13 成功可以复制——迅雷创始人邹胜龙 57 第3堂课 java语言基础知识 59 视频讲解:178分钟 3.1 java结构 60 3.1.1 定义包 60 3.1.2 定义 60 3.1.3 导入api库 60 3.1.4 定义变量 61 3.1.5 定义主方法 61 3.1.6 运行主 61 3.2 代码注释 61 3.2.1 单行注释 61 3.2.2 多行注释 61 3.2.3 javadoc文档注释 62 3.3 变量与常量 62 3.3.1 java保留字 62 3.3.2 定义变量 63 3.3.3 定义常量 64 3.3.4 常量与变量的有效范围 64 3.4 数据型 65 3.4.1 计算机常用数制 66 3.4.2 整数型 67 3.4.3 浮点型 69 3.4.4 字符型 69 3.4.5 布尔型 71 3.5 数据型转换 71 3.5.1 自动型转换 71 3.5.2 强制型转换 73 3.6 运算符 74 3.6.1 赋值运算符 74 3.6.2 算术运算符 75 3.6.3 自增和自减运算符 76 3.6.4 比较运算符 76 3.6.5 逻辑运算符 77 3.6.6 位运算符 78 3.6.7 三元运算符 80 3.6.8 运算符优先级 81 3.7 编码规范 81 3.8 照猫画虎——基本功训练 82 3.8.1 基本功训练1——合理设定变量型 82 3.8.2 基本功训练2——变量自增运算 83 3.8.3 基本功训练3——型转换 84 3.8.4 基本功训练4——运算符的应用 84 3.8.5 基本功训练5——求最大值 85 3.8.6 基本功训练6——位移实现数字乘以2的8次幂 86 3.9 情景应用——拓展与实践 86 3.9.1 情景应用1——输出长方形面积 86 3.9.2 情景应用2——输出字节bit位的值 87 3.9.3 情景应用3——判断奇偶数 88 3.9.4 情景应用4——简单数据加密 89 3.9.5 情景应用5——判断闰年 89 3.9.6 情景应用6——异或运算实现变量值交换 90 3.10 自我测试 91 3.11 行动指南 92 3.12 成功可以复制——知识改变命运、科技改变生活 93 第4堂课 流程控制语句 95 第5堂课 数组应用 131 第6堂课 面向对象编程 155 第7堂课 字符串处理 189 第2部分 提高 第8堂课 的继承与多态特性 219 第9堂课 其他特性与异常处理 257 第10堂课 swing编程基础 283 第11堂课 多线程编程 319 第12堂课 事件处理的应用 345 第13堂课 常用工具 373 第14堂课 常用集合 403 第3部分 高级 第15堂课 数据库编程应用 429 第16堂课 输入输出流与文件 457 第17堂课 网络程序设计 491 第18堂课 表格控件的应用 517 第19堂课 树控件的应用 555 第20堂课 其他高级控件 581 第21堂课 图形绘制技术 621 第4部分 实战 第22堂课 进销存管理系统 647 第23堂课 企业内部通讯管理系统 729 第24堂课 图书馆管理系统 737 附录a java程序编码规范 749
本书是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。本书充分考虑了初学Java语言的种种困难,讲解时细致入微,抽丝剥茧,层层推进,并采用对比、比喻和比的方式讲解,还给出了大量的流程图帮助读者理解各种概念和程序的运行过程。另外,作者专门录制了近16小时的多媒体语音教学视频帮助读者直观地学习。这些视频和书中的源代码一起收录于本书的DVD光盘中。 本书分3。第1Java语言基本语法,包括Java语言概述、配置开发环境、Java中的基本数据型、Java运算符、Java流程控制语句和数组。第2Java语言高级语法,包括、对象、方法、继承、多态、修饰符、接口、抽象、内部Java异常处理和多线程编程。第3Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合、线程同步、接口和JDBC编程有机地结合起来,展示了开发一个简单程序的典型步骤。 本书适合广大想学习一门编程语言的读者、没有任何基础Java入门读者、Java自学人员、从其他语言转向Java语言的读者、大中专院校的学生和社会培训学生。
第1 Java开发必备基础 第1章 搭建Java开发环境 1.1 Java的过去、现在和未来 1.1.1 Java的历史 1.1.2 Java的语言特点 1.1.3 Java API简介 1.1.4 Java未来发展 1.2 Java程序设计环境 1.2.1 命令行工具——JDK 6.0 1.2.2 安装工具包JDK 1.2.3 设置JDK环境 1.2.4 集成开发环境安装——MyEclipse 8.5 1.2.5 MyEclipse的一些常用操作 1.3 创建和运行Java程序 1.3.1 手工创建、编译和运行Java程序 1.3.2 在MyEclipse 8.5中创建、运行、调试和管理Java项目 1.4 小结 第2章 Java面向对象编程 2.1 面向对象的一些概念 2.1.1 面向对象涉及的概念 2.1.2 和对象 2.2 面向对象的一些特性 2.2.1 继承特性 2.2.2 多态特性 2.2.3 封装特性 2.3 Java中实现的面向对象特性 2.3.1 定义 2.3.2 创建对象 2.3.3 实现继承 2.3.4 实现多态 2.3.5 实现封装 2.4 小结 第3章 Java新特性 3.1 Java的一些简单新特性 3.1.1 静态导入 3.1.2 可变参数函数 3.1.3 增强版for循环 3.1.4 基本数据的拆、装箱操作(autoboxing和unboxing) 3.2 枚举 3.2.1 枚举的实现原理 3.2.2 枚举的简单应用 3.2.3 枚举的高级特性 3.3 反射 3.3.1 反射的基石——Class 3.3.2 反射的基本应用 3.3.3 反射的高级应用 3.4 标注 3.4.1 标注的简单使用 3.4.2 JDK的内置标注 3.5 泛型 3.5.1 为什么要使用泛型 3.5.2 泛型的一些特性 3.5.3 泛型的通配符 3.6 加载器 3.6.1 什么是加载器 3.6.2 什么是加载器的委派模型 3.6.3 编写一个自己的加载器 3.7 动态代理 3.7.1 什么是代理 3.7.2 动态代理基础 3.7.3 InvocationHandler接口 3.7.4 动态代理的设计模式 3.8 小结 第2 线程开发 第4章 学生并发接水(线程Thread) 4.1 学生并发接水原理 4.1.1 项目结构框架分析 4.1.2 项目功能业务分析 4.2 不排队形式学生并发接水 4.2.1 水龙头 4.2.2 学生 4.2.3 测试 4.3 学生并发接水的其他形式 4.3.1 “排队接水”水龙头 4.3.2 “接完水后一起回教室”水龙头 4.4 知识点扩展——线程的基础知识 4.4.1 为什么要使用线程 4.4.2 多线程程序的编写方式 4.5 小结 第5章 模拟做饭场景(线程的join()方法) 教学视频:7分钟5.1 做饭场景原理 5.1.1 项目结构框架分析 5.1.2 项目功能业务分析 5.2 纷乱的做饭场景 5.2.1 儿子的 5.2.2 妈妈的 5.2.3 做饭场景的 5.2.4 修改后的妈妈 5.3 知识点扩展——线程的状态 5.3.1 线程的创建状态 5.3.2 线程的暂停状态 5.3.3 线程的结束状态 5.4 小结 第6章 火车站售票系统(线程安全知识) 6.1 火车站售票系统原理 6.1.1 项目结构框架分析 6.1.2 项目功能业务分析 6.2 没有实现线程安全的火车票售票系统 6.2.1 火车票的 6.2.2 售票台的 6.2.3 实现线程安全的火车票售票系统 6.3 知识点扩展——线程的同步知识 6.3.1 为什么要使用同步机制 6.3.2 Synchronized的同步块 6.3.3 Synchronized的同步方法 6.3.4 死锁的问题 6.4 小结 第7章 生产者与消费者问题(线程通信知识) 7.1 生产者与消费者原理 7.1.1 项目结构框架分析 7.1.2 项目功能业务分析 7.2 无线程通信的生产者与消费者项目 7.2.1 生产者 7.2.2 消费者 7.2.3 储存库 7.2.4 测试 7.3 实现线程通信的生产者与消费者项目 7.3.1 生产者和消费者的 7.3.2 储存库的 7.4 知识点扩展——线程的通信知识 7.4.1 线程通信的基本知识 7.4.2 线程通信的具体实例 7.5 小结 第8章 关机工具(Timer+系统命令) 8.1 关机工具原理 8.1.1 项目结构框架分析 8.1.2 项目功能业务分析 8.2 关机工具的实现过程 8.2.1 关机工具的 8.2.2 关机工具的工具 8.3 知识点扩展——关机工具项目涉及的知识 8.3.1 Timer和TimerTask 8.3.2 shutdown命令 8.3.3 通过shutdown命令实现网络远程关机 8.4 小结 第3 GUI(图形用户界面)开发 第9章 典型的图形用户界面(各种组件) 9.1 Label和Button的用户界面 9.1.1 分析按钮和面板的用户界面 9.1.2 按钮和面板的用户界面 9.1.3 组件Button和Label的基本知识 9.2 复选框的用户界面 9.2.1 分析复选框的用户界面 9.2.2 按钮和面板的用户界面 9.2.3 组件Checkbox和CheckboxGroup的基本知识 9.3 下拉菜单和列表的用户界面 9.3.1 分析下拉菜单和列表的用户界面 9.3.2 下拉菜单和列表的用户界面 9.3.3 Choice和List组件的基本知识 9.4 输入的用户界面 9.4.1 分析输入的用户界面 9.4.2 输入的用户界面 9.4.3 TextField和TextArea组件的基本知识 9.5 滚动条的用户界面 9.5.1 分析滚动条的用户界面 9.5.2 滚动条的用户界面 9.5.3 滚动组件的基本知识 9.6 菜单的用户界面 9.6.1 分析菜单组件的用户界面 9.6.2 菜单的用户界面 9.6.3 菜单组件的基本知识 9.7 对话框的用户界面 9.7.1 分析对话框和文件对话框的用户界面 9.7.2 对话框的用户界面 9.7.3 Dialog和FileDialog组件的基本知识 9.8 小结 第10章 计算器(布局管理器) 10.1 计算器原理 10.1.1 项目结构框架分析 10.1.2 项目功能业务分析 10.2 计算器的实现过程 10.3 知识点扩展——事件机制的高级知识 10.3.1 为什么需要版面的配置 10.3.2 Java语言中的各种布局管理器 10.4 小结 第11章 秒表(事件+线程) 11.1 秒表原理 11.1.1 项目结构框架分析 11.1.2 项目功能业务分析 11.2 秒表的实现过程 11.2.1 秒表 11.2.2 测试秒表的 11.3 知识点扩展——事件机制的基础知识 11.3.1 事件处理机制 11.3.2 Window事件 11.3.3 Mouse事件 11.3.4 Key事件 11.3.5 其他底层事件 11.3.6 事件的高级编写方法 11.4 小结 第12章 捉迷藏游戏(事件) 12.1 捉迷藏游戏原理 12.1.1 项目结构框架分析 12.1.2 项目功能业务分析 12.2 捉迷藏游戏的实现过程 12.2.1 捉迷藏游戏项目的原理 12.2.2 自定义按钮 12.2.3 测试的 12.3 知识点扩展——事件机制的高级知识 12.3.1 事件多重应用 12.3.2 事件处理的详细过程 12.4 小结 第13章 鼠标绘直线(绘图+事件) 13.1 鼠标绘直线原理 13.1.1 项目结构框架分析 13.1.2 项目功能业务分析 13.2 鼠标绘直线的实现过程 13.2.1 直线的 13.2.2 实现窗口——通过paint()方法 13.2.3 实现窗口——通过双缓冲技术 13.3 知识点扩展——画图的基础知识 13.3.1 画图的基础知识 13.3.2 各种型对象的绘制 13.4 小结 第14章 指针时钟项目(Swing组件+时间算法) 14.1 指针时钟原理 14.1.1 项目结构框架分析 14.1.2 项目功能业务分析 14.2 指针时钟的实现过程 14.2.1 指针时钟的界面 14.2.2 绘制指针时钟的 14.3 知识点扩展——从AWT到Swing的过渡 14.3.1 窗口JFrame 14.3.2 按钮JButton和面板JLabel 14.3.3 单选按钮和复选框组件 14.3.4 选择框组件 14.3.5 输入框组件 14.4 小结 第15章 控制动画项目 (JSlider和Timer组件) 15.1 控制动画原理 15.1.1 项目结构框架分析 15.1.2 项目功能业务分析 15.2 控制动画的实现过程 15.2.1 控制动画的主界面 15.2.2 控制动画的逻辑 15.3 知识点扩展——JSlider和Timer组件的基础知识 15.3.1 使用JSlider组件创建无刻度的滑杆 15.3.2 使用JSlider组件创建带数字刻度的滑杆 15.3.3 使用JSlider组件创建带字符刻度的滑杆 15.3.4 JSlider组件的高级应用 15.3.5 Swing中的多线程 15.3.6 Timer组件的基础知识 15.3.7 Timer组件的应用 15.4 小结 第16章 记事本(对话框组件) 16.1 记事本原理 16.1.1 项目结构框架分析 16.1.2 项目功能业务分析 16.2 记事本的实现过程 16.2.1 实现记事本的界面 16.2.2 实现菜单功能 16.2.3 文件型的过滤 16.3 记事本的实现过程——字体设置对话框 16.3.1 字体设置对话框——主界面 16.3.2 字体设置对话框——jPanel1组件界面 16.3.3 字体设置对话框——其他组件 16.4 小结 第17章 拼图游戏(GUI综合应用) 17.1 拼图游戏原理 17.1.1 项目结构框架分析 17.1.2 项目功能业务分析 17.1.3 拼图游戏项目的原理 17.2 拼图游戏的实现过程 17.2.1 实现移动功能的按钮 17.2.2 主面板的 17.2.3 主窗口的 17.3 小结 第4 文件操作和访问 18.1 文件属性查看器原理 18.1.1 项目结构框架分析 18.1.2 项目功能业务分析 18.2 文件属性查看器项目 18.2.1 实现显示文件信息的自定义窗口 18.2.2 自定义窗口的显示 18.3 知识点扩展——文件的操作和访问 18.3.1 通过FileOp实现文件创建和删除功能 18.3.2 通过FileDir实现列举文件和目录的功能 18.3.3 File提供的属性和方法 18.3.4 文件访问的基本概念 18.3.5 文件的基本访问方式——字节方式 18.3.6 文件的基本访问方式——字符方式 18.3.7 文件的高级访问方式 18.4 小结 第19章 文件内容查看器(GUI+文件访问) 19.1 文件内容查看器原理 19.1.1 项目结构框架分析 19.1.2 项目功能业务分析 19.2 文件内容查看器项目 19.2.1 设计项目的界面——文件内容查看器输入界面 19.2.2 “打开”菜单项的处理方法 19.2.3 单击列表选项的处理方法 19.3 知识点扩展——管道的访问 19.3.1 管道的访问——字节方式 19.3.2 管道的访问——字符方式 19.4 知识点扩展——内存的访问 19.4.1 内存的访问——字节方式 19.4.2 内存的访问——字符和字符串方式 19.5 小结 第20章 日记簿(GUI+文件访问和操作) 20.1 日记簿原理 20.1.1 项目结构框架分析 20.1.2 项目功能业务分析 20.2 日记簿项目 20.2.1 设计项目的界面——日记薄输入界面 20.2.2 “保存”按钮的事件处理 20.2.3 “查看日记”按钮的事件处理 20.2.4 设计项目的界面——日记列表界面 20.2.5 “查看”按钮的事件处理 20.2.6 “删除”按钮的事件处理 20.3 知识点扩展——过滤流的基础知识 20.3.1 过滤流的缓存(Buffering) 20.3.2 过滤流实现字节和字符相互转换 20.3.3 过滤流特定数据 20.3.4 过滤流对象序列化 20.3.5 过滤流打印 20.4 小结 第21章 查找和替换项目(GUI+字符串处理) 21.1 查找和替换原理 21.1.1 项目结构框架分析 21.1.2 项目功能业务分析 21.2 查找和替换项目——利用AWT组件 21.2.1 设计项目的界面——查找和替换输入界面 21.2.2 各种按钮的事件处理 21.2.3 字符串处理的 21.3 查找和替换项目——利用Swing组件 21.3.1 设计项目的界面——查找和替换输入界面 21.3.2 各种按钮的事件处理 21.4 小结 第5 Applet程序开发 第22章 图像轮显动画项目(显示图像+多线程) 22.1 图像轮显动画原理 22.1.1 项目结构框架分析 22.1.2 项目功能业务分析 22.2 图像轮显动画项目 22.3 知识点扩展——Applet程序的基础知识 22.3.1 Applet程序的执行过程 22.3.2 Applet程序的执行环境 22.3.3 Applet程序的输出 22.3.4 Applet程序的标记 22.3.5 参数的传递 22.3.6 Applet程序的相关方法 22.4 小结 第23章 Applet事件监听项目 (事件处理机制) 23.1 Applet事件监听原理 23.1.1 项目结构框架分析 23.1.2 项目功能业务分析 23.2 Applet事件监听项目 23.2.1 事件监听的 23.2.2 承载事件监听的页面 23.3 知识点扩展——MyEclipse开发环境对Applet程序的支持 23.3.1 MyEclipse开发环境对Applet项目的支持 23.3.2 MyEclipse开发环境对JAR的支持 23.4 小结 第24章 动画播放项目(音频操作+多线程) 24.1 动画播放原理 24.1.1 项目结构框架分析 24.1.2 项目功能业务分析 24.2 动画播放项目 24.2.1 动画的 24.2.2 控制动画的 24.3 知识点扩展——Applet程序的高级知识 24.3.1 音频播放 24.3.2 Applet的上下文对象 24.4 小结 25.1 网络聊天室原理 25.1.1 项目结构框架分析 25.1.2 项目功能业务分析 25.2 网络聊天室的实现过程 25.3 知识点扩展——网络编程和UDP协议 25.3.1 网络编程涉及的基本概念 25.3.2 套接字(Socket)机制 25.3.3 UDP协议 25.3.4 TCP协议 25.3.5 TCP协议客户端 25.4 小结 第26章 FTP服务器客户端 (FtpClient+I/O处理) 26.1 FTP服务器客户端原理 26.1.1 项目结构框架分析 26.1.2 项目功能业务分析 26.2 FTP服务器客户端的实现过程 26.2.1 FTP服务器操作的工具 26.2.2 实现文件上传的 26.2.3 实现文件下载的 26.3 知识点扩展——FtpClient的相关知识 26.3.1 实现FTP服务器相关操作 26.3.2 相关JAR包导入问题 26.4 小结 第27章 Web服务器(HTTP协议) 27.1 Web服务器原理 27.1.1 项目结构框架分析 27.1.2 项目功能业务分析 27.2 Web服务器的实现过程 27.2.1 实现与浏览器通信的 27.2.2 实现Web服务器的 27.2.3 浏览器所请求的页面 27.3 知识点扩展——HTTP协议知识 27.3.1 HTTP协议原理 27.3.2 实现HTTP协议服务器的原理 27.4 小结 28.1 QQ聊天工具原理 28.1.1 项目结构框架分析 28.1.2 项目功能业务分析 28.2 QQ项目——对象模型的 28.2.1 信息的 28.2.2 “用户”的 28.3 QQ项目——登录功能 28.3.1 QQ服务器界面的设计 28.3.2 QQ服务器后台程序 28.3.3 QQ客户端登录界面的设计 28.3.4 QQ客户端后台程序 28.3.5 成员列表窗口 28.4 QQ项目——聊天功能 28.4.1 服务器端的信息转发 28.4.2 客户端信息的发送和接收 28.4.3 客户端信息转发 28.5 小结 第7 项目案例实战 第29章 人员信息管理项目 (接口设计模式+MySQL数据库) 29.1 人员信息管理原理 29.1.1 项目结构框架分析 29.1.2 项目功能业务分析 29.2 人员信息管理项目前期准备 29.2.1 设计数据库 29.2.2 数据库操作相关 29.3 人员信息管理项目——DAO层 29.3.1 实现数据连接操作(DAO)的接口 29.3.2 实现数据连接操作(DAO)的实现 29.3.3 实现数据连接操作(DAO)的代理 29.3.4 实现数据连接操作(DAO)的工厂 29.4 人员信息管理项目——服务层和表示层 29.4.1 人员信息管理项目的服务层 29.4.2 人员信息管理项目的表示层 29.4.3 工具 29.5 人员信息管理项目——代理测试 29.5.1 测试实现业务功能的各种方法 29.5.2 人员信息管理入口 29.6 知识点扩展——设计模式的基础知识 29.6.1 工厂设计模式 29.6.2 代理设计模式 29.7 小结 第30章 中国象棋游戏(GUI+游戏规则算法) 30.1 象棋游戏原理 30.1.1 象棋游戏的基本规则 30.1.2 项目结构框架分析 30.1.3 项目功能业务分析 30.2 象棋游戏项目——象棋游戏的主 30.2.1 实现象棋游戏的主界面 30.2.2 实现象棋游戏中添加棋子的功能 30.2.3 实现象棋游戏中棋子闪烁的功能 30.2.4 处理单击棋子事件 30.2.5 处理单击按钮事件 30.3 象棋游戏项目——规则的内部 30.3.1 实现卒移动和吃的方法 30.3.2 实现炮、车移动和吃的方法 30.3.3 实现马移动和吃的方法 30.3.4 实现象移动和吃的方法 30.3.5 实现士移动和吃的方法 30.3.6 实现将移动和吃的方法 30.4 小结 第31章 俄罗斯方块游戏网络版(Swing+多线程+网络编程) 31.1 俄罗斯方块游戏项目原理 31.1.1 基本原理 31.1.2 项目结构框架分析 31.1.3 项目功能业务分析 31.2 俄罗斯方块游戏项目——初步设计涉及的对象 31.2.1 正方形 31.2.2 俄罗斯方块 31.2.3 俄罗斯方块游戏项目的TOP10分数对象 31.3 俄罗斯方块游戏项目——服务器端和客户端 31.3.1 表示出俄罗斯方块游戏项目的服务器端 31.3.2 表示出俄罗斯方块游戏项目的客户端 31.4 俄罗斯方块游戏项目——游戏主界面 31.4.1 俄罗斯方块游戏的主界面 31.4.2 俄罗斯方块游戏的事件处理 31.4.3 俄罗斯方块游戏的状态工具栏 31.5 俄罗斯方块游戏项目——其他界面的设计 31.5.1 “关于”面板 31.5.2 连接对方面板 31.5.3 分数报告面板 31.5.4 设置级别面板 31.5.5 警告面板和对话框 31.5.6 游戏结束面板和对话框 31.6 小结 第32章 图书管理系统项目 (GUI+Oracle数据库) 32.1 图书管理系统原理 32.1.1 项目结构框架分析 32.1.2 项目功能业务分析 32.2 图书管理系统项目——图书的操作 32.2.1 实现添加图书功能的 32.2.2 实现修改图书功能的 32.2.3 实现浏览图书信息的 32.2.4 实现删除图书信息的 32.3 图书管理系统项目——用户的操作 32.3.1 实现添加用户功能的 32.3.2 实现删除用户功能的 32.3.3 实现修改用户功能的 32.3.4 实现用户登录功能的 32.3.5 实现用户列表功能的 32.4 图书管理系统项目——出借图书的操作 32.4.1 出借图书操作的 32.4.2 借书列表方法 32.4.3 修改出借图书信息方法 32.5 图书管理系统项目——归还图书的操作 32.5.1 归还图书 32.5.2 修改归还图书信息 32.6 图书管理系统项目——该项目的其他 32.6.1 主窗口 32.6.2 数据库操作 32.7 小结
### 回答1: Java面向对象的三大特性是封装、继承和多态。封装是指将实现细节从接口中隐藏起来,使客户端无需关心实现细节,只需要调用接口即可。继承是指子可以继承父的属性和方法,使子可以共享父的属性和方法,从而实现代码的复用。多态是指同一操作作用于不同的对象,可以有不同的解释,从而实现不同的功能。 ### 回答2: Java面向对象的三大特性是封装、继承和多态。 封装是指将数据和对该数据的操作方法封装在一个中,通过访问权限修饰符对数据进行限制,从而隐藏数据的具体实现细节,仅对外提供必要的接口,保证数据的安全性和一致性。通过封装可以提高代码的复用性和可维护性,降低耦合性。 继承是一种基于现有创建新的机制,通过使用已有的属性和方法,实现代码的重用。在Java中,通过使用extends关键字可以实现的继承,子可以继承父的公共属性和方法,并且可以在继承的基础上进行扩展和重写。继承可以提高代码的可复用性和可扩展性,减少代码的冗余和重复。 多态是指同一型的对象在不同的情况下表现出不同的行为。在Java中,通过继承和方法重写的方式实现多态。父型的引用变量可以引用子型的对象,从而可以根据不同的对象型调用相应的方法。通过多态机制,可以提高代码的灵活性和可扩展性,增加代码的可读性。 这三个特性相互配合,可以使得Java面向对象的程序具有高内聚、低耦合的特点。封装保证了数据的隐藏和安全性,继承提供了代码的重用和扩展性,而多态则实现不同对象型的统一处理。面向对象的三大特性Java中重要的编程思想,对于代码的设计和开发具有重要意义。 ### 回答3: Java面向对象的三个特性分别是封装、继承和多态。 首先,封装是指将数据和方法封装在一个中,对外只暴露必要的接口,隐藏了其具体的实现细节。通过封装,可以提高代码的可维护性和安全性,同时也减少了代码的耦合性,提高了代码的复用性。 其次,继承是指一个对象可以直接拥有另一个对象的属性和方法。通过继承,一个可以继承另一个的属性和方法,从而减少了代码的重复性,提高了代码的复用性。同时,继承也能够实现多态,允许将子的对象赋值给父的变量,实现了之间的替换和扩展。 最后,多态是指一个对象可以具有多种形态。在Java中,多态通过程序的运行时动态绑定实现。多态有助于提高代码的灵活性和可扩展性。通过多态,可以编写通用的代码,使得程序可以处理不同型的对象,从而提高了代码的可复用性和可维护性。 总的来说,Java面向对象的三大特性——封装、继承和多态,分别通过对数据和方法的封装、层次化结构的继承和运行时动态绑定的多态实现了代码的封装性、代码的复用性和代码的灵活性。这些特性使得Java成为一种非常强大的面向对象编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值