(1)抽象类 (2)接口 (3)内部类 (4)Object类
1.抽象类(重点)
1.1 抽象方法的概念
抽象方法就是指不能具体实现的方法,也就是该方法没有方法体,使用abstract关键字修饰
如:
public abstract void cry();
1.2 抽象类的概念
抽象类就是不能具体实现的类,也就是不能实例化对象,使用abstract关键字修饰。
1.3 注意事项
a.抽象类中可以有成员变量、成员方法以及构造方法。
b.抽象类中可以有抽象方法也可以没有。
c.具有抽象方法的类必须是抽象类,因此很多资料上认为具有抽象方法并且使用abstract
关键字修饰的类才为真正意义上的抽象类。
1.4 抽象类的意义
抽象类的意义不在于自身创建对象而在于被继承,当一个类继承抽象类之后必须要重写继承下来的抽象方法,否则该类也得变成抽象类。
因此,抽象类对子类具有强制性和规范性,通常叫做 模板设计模式。
经验的分享:
在以后的开发中推荐使用父类引用指向子类对象的方式,因为父类引用直接调用的所有方法一定是父类中拥有的方法,若后续调试中需要更换子类时,只需要将new后面的子类类型修改完毕而其它所有代码不动就立刻生效,从而提高了代码的可维护性和可扩展性。
该方式的缺点:不能直接调用子类独有的方法,若调用则需要强制类型转换。
练习:
自定义Account类,特征有:账户余额,要求实现封装并提供计算利息并返回的抽象方法;
自定义FixedAccount类继承Account类,在main()方法中使用多态的语法设置余额并计算利息,最后打印出来。
2.接口(重点)
2.1 基本概念
接口本质上就是一种比抽象类还抽象的类,也就是依然不能实例化对象。
定义抽象类使用class关键字,而定义接口使用interface关键字。
2.2 类和接口之间的关系
类和类之间的关系 使用extends关键字表达继承的关系 支持单继承
类和接口之间的关系 使用implements关键字表达实现的关系 支持多实现
接口和接口之间的关系 使用extends关键字表达继承的关系 暂时认为单继承
2.3 抽象类和接口之间的区别(笔试题)
(1)定义抽象类使用class,而定义接口使用interface关键字。
(2)继承抽象类使用extends,而实现接口使用implements关键字。
(3)继承抽象类支持单继承,而实现接口支持多实现。
(4)抽象类中可以有构造方法,而接口中不可以有。
(5)抽象类中可以有成员变量,而接口中全部是常量。
(6)抽象类中可以有成员方法,而接口中全部是抽象方法。
(7)抽象类中增加方法可以不影响子类,而接口中增加方法一定会影响子类。
(8)从jdk1.8开始允许接口中出现带有方法体的方法,但需要使用default关键字修饰。
3.内部类(了解)
3.1 基本概念
当一个类的定义放在另外一个类的类体中时,把这个放在内部的类叫做内部类,该类所在的类叫做外部类。
类的内容:成员变量、成员方法、构造方法、构造块和静态语句块、内部类。
3.2 语法格式
class 类名{
class 类名{
内部类的类体;
}
}
3.3 基本功能
当一个类存在的价值仅仅是为某一个类单独服务时,此时就可以将该类定义为内部类,内部类可以直接访问所在类的私有成员变量而不再需要提供公有的get和set方法。
3.4 基本分类
普通内部类 - 直接将一个类的定义放在另外一个类的内部。
静态内部类 - 使用static关键字修饰的内部类。
- 只有内部类才可以使用static关键字修饰。
局部内部类 - 直接将一个类的定义放在方法体的内部。
- 局部内部类只在方法体的内部有效。
匿名内部类 - 没有名字的内部类,通常用于构造父类/接口类型的对象。
3.5 匿名内部类(重点)
(1)语法格式
父类/接口类型 引用变量名 = new 父类/接口类型(){
进行方法的重写;
};
(2)经验的分享
当接口类型的引用作为方法的形参时,实参的传递方式有两种:
a.自定义类实现接口,然后new该实现类的对象作为实参传递;
b.采用匿名内部类的语法格式得到给接口的引用作为实参传递;
多态的使用场合:
a.直接在方法体中使用多态的形式
Person p = new Student();
b.通过方法的参数传递来形成多态
public static void test(A a){ ...}
A a = new SubA();
TestA.test(a); => TestA.test(new SubA())
c.通过方法的返回值来形成多态
public Person show(){
return new Student();
}
4.Object类
4.1 常用的包
java.lang包 - 该包是Java语言的核心包,该包中的所有内容由Java虚拟机自动导入。
- 如:String类、System类等
java.util包 - 该包是Java语言的工具包,该包中提供了大量的工具类和集合类等。
- 如:Scanner类、Random类等
java.io包 - 该包是Java语言的输入输出包,该包中包含了大量读写文件相关的类等。
- 如:FileInputStream类等。
java.net包 - 该包是Java语言的网络包,该包中包含了大量网络编程相关的类等。
- 如:ServerSocket类等。
... ...
4.2 Object类
(1)基本概念
java.lang.Object类是类层次结构的根类,任何类都是该类的直接或间接子类。
(2)常用的方法
Object() - 使用无参的方式来构造对象。
boolean equals(Object obj) - 用于判断调用对象是否和参数对象相等。
int hashCode() - 用于获取调用对象的哈希码值(内存地址的编号)。
String toString() - 用于获取调用对象的字符串表示形式并返回。
(1)抽象类 (2)接口 (3)内部类 (4)Object类的更多相关文章
- Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总
Unit06 - 抽象类.接口和内部类(下) . 面向对象汇总 1.多态: 1)意义: 1.1)同一类型的引用指向不同的对象时,有不同的实现 行为的多态:cut().run(). ...
- Unit05 - 抽象类、接口和内部类(上)
Unit05 - 抽象类.接口和内部类(上) 1.static final常量: 1)必须声明同时初始化 2)通过类名来访问,不能被改变 3)建议:常量名所有字母都大写(多个单词间用_) 4) ...
- Java程序设计8——抽象类、接口与内部类
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...
- Java面向对象(三) 【面向对象深入:抽象类,接口,内部类等】
面向对象(Object Oriented) 1.抽象类抽象就是将拥有共同方法和属性的对象提取出来.提取后,重新设计一个更加通用.更加大众化的类,就叫抽象类.1)abstract 关键字修饰类.方法,即 ...
- Java抽象类、接口、内部类
抽象类的概念: 1.Java中可以定义没有方法体的方法,还方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类: 2.如,shape类计算周长和面积的方法无法确定,那么就可以将这样 ...
- Day06:抽象类、接口和内部类(上)
JVAV中的常量 什么是常量? 常量就是不会变化的数值 为什么需要常量? 方便使用(调用)不会变化的数值 特性 不能修改 所有对象共享 常量一定是成员 定义 public static final 类 ...
- Day12 抽象类、接口、内部类-面向对象编程(3)
抽象类 abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类: 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类. ...
- JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类
常用类 内部类 成员内部类.静态内部类.局部内部类.匿名内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类私有成员,而不破坏封装 可为外部类 ...
- Java抽象类、接口和内部类
1.抽象方法.抽象类 1)抽象方法: 由abstract修饰 只有方法的定义,没有方法的具体实现(连{}都没有) 由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个 ...
随机推荐
- JS实现年月日三级联动+省市区三级联动+国家省市三级联动
开篇随笔:最近项目需要用到关于年月日三级联动以及省市区三级联动下拉选择的功能,于是乎网上搜了一些做法,觉得有一些只是给出了小的案例或者只有单纯的js还不完整,却很难找到详细的具体数据(baidu搜索都 ...
- 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题
刚装好SSMS 17.1准备体验,弹出: 一番搜索,普遍办法都是安装VS2015独立shell.删除某个注册表项什么的,没用,首先这个shell我是装了的,然后也没有那个注册表项.我自己尝试过重装sh ...
- Hive 基础你需要掌握这些
HDFS 中一个简单的 Join查询,是否需要撸一大串代码?我只会SQL语句 能不能入坑大数据?这里我们就来聊一聊 Hive. Hive 是什么? Hive 是一种数据仓库工具,不提供数据存储(数据还 ...
- 使用DOM解析xml文件
使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...
- hdu 2030 统计汉字个数
汉字统计 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- MVC,MVP 和 MVVM 的图示(转)
作者: 阮一峰 日期: 2015年2月 1日 转自:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 复杂的软件必须有清晰合理的架构,否则 ...
- Spring boot 入门二:Spring Boot配置文件详解
一.自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/resources目录下创建一个application.properties.同时也支持ym ...
- Python 正则 re.sub替换
# 正则将匹配到的两个字段,都替换成某个值import re s0 = 'BOY and GIRL' s1 = re.sub(r'BOY|GIRL', 'HUMAN', s0) print s1 # ...
- CSS中width和height与盒子模型的关系
盒子模型 css中盒子模型包含属性margin.border.padding.width与height,他们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也具有这些属性,所以 ...
- 由Leetcode详解算法 之 动态规划(DP)
因为最近一段时间接触了一些Leetcode上的题目,发现许多题目的解题思路相似,从中其实可以了解某类算法的一些应用场景. 这个随笔系列就是我尝试的分析总结,希望也能给大家一些启发. 动态规划的基本概念 ...