第2章 Java面向对象编程

18_一个案例了解多态的实际意义

多态的分类:特定的(强制的,重载的)、通用的(参数的,包含的)(3)参数的多态
参数多态允许把许多类型抽象成单一的表示。例如,在一个名为List的抽象类中,描述了一组具有同样特征的对象,提供
了一个通用的模板。我们可通过制定一种类型以重用这个抽象类。这些参数可以是用户定义的类型,很多用户都可以使用
这个抽象类,因此参数多态毫无疑问称为最强大的多态多态的意义在于:可以屏蔽不同子类差异性编写通用的代码,从而产生不同的效果案例:形状:横坐标、纵坐标矩形:长度、宽度写一个方法既能打印矩形又能打印圆形

TestShape.java

public static void draw(Shape s){//在编译阶段调用Shape类的show()方法,在运行阶段调用子类重写的show()方法//虽然看似调用同一个show()方法,但是根据实参的不同最终调用不同的版本带来不同的结果s.show();
}public static void main(String[] args){Rect r = new Rect(1,2,3,4);//矩形,Rect为Shape子类TestShape.draw(r);//不同的参数将会调用不同子类中的show方法Circle c = new Circle(5,6,7);//圆形,Circle为Shape子类TestShape.draw(c);
}
public class TestSubAbstract extends TestAbstract{public static void main(String[] args){//子类的引用指向子类自己的对象TestSubAbstract ts = new TestSubAbstract();//子类的引用只能调用自己的show()方法ts.show();//父类的引用指向子类的对象,形成多态TestAbstract ta = new TestSubAbstract();//在编译阶段调用父类的show()方法,在运行阶段调用子类重写父类以后的方法ta.show();}
}

19_抽象类

抽象方法

抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用abstract关键字修饰;语法格式:访问修饰符 abstract void show();

抽象类

抽象类就是指使用abstract关键字修饰的类,抽象类不能实例化对象
抽象方法只能定义在抽象类之中,如
public abstract TestAbstract{. . .. . .public abstract void show();//抽象方法没有方法体,因此不能够有大括号
}
//抽象类就是用来继承的,如果抽象类之中有方法体,则要重写这个方法体
public class TestSubAbstract extends TestAbstract{. . .. . .@Overridepublic void show() { . . . }
}

注意事项

1.抽象类中可以有成员变量、成员方法以及构造方法;
2.抽象类中可以有抽象方法也可以没有;
3.拥有抽象方法的类必须是抽象类,因此通常情况下认为拥有抽象方法并且有abstract关键字修饰的类才认为是真正的抽象类;

实际意义

抽象类的意义不在于实例化,而在于被击成,若一个类继承自抽象类则必须重写抽象方法,否则该类也得变抽象类
因此,抽象类对子类具有强制性和规范性,叫做模板设计模式经验分享:在以后的开发中推荐使用父类指向子类的对象形式,因为父类引用直接调用的方法一定是父类拥有的方法,当需要更换指向子类对象的时候,只需要将new后面的方式类型更改一下就可以了,其他的代码无需改动,因此提高了代码的可维护性和可扩展性。该方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。

20_接口

基本概述

接口就是一种比抽象类还抽象的类,该类型不能实例化对象定义类的关键字是class,而定义接口的关键字是interface继承类的关键字是extends,而定义接口的关键字是implements当多个类型之间具有相同的行为能力的时候,java中就可以通过接口来进行类型之间的联系。
当通过接口可以解决java中单继承所带来的一些类型无法共享的问题接口定义了某一些规范,并且需要去遵守
接口不关心类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。

语法格式

修饰符 interface 接口名称 [extends 父接口1,父接口2,......]{零个到多个常量的定义........零个到多个抽象方法的定义........零个到多个默认方法定义.......(jdk1.8新特性)零个到多个静态方法的定义........(jdk1.8新特性)
}

注意事项

1.接口可以实现多继承,也就是说一个接口可以同时继承多个父接口
2.实现结果的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类
3.一个类可以继承一个父类,同时实现多个接口
4.接口中的所有成员变量都必须public static final共同修饰,也就是常量
5.接口中的所有成员变量都必须有public abstract共同修饰,也就是抽象方法

类和接口之间的关系

类和类之间采用继承的关系     使用extends关键字        支持单继承
类与接口之间采用实现的关系   使用implements关键字     支持多实现
接口与接口之间采用继承的关系  使用extends关键字        通常认为支持单继承

抽象类和接口的主要区别(笔试题)

1.定义抽象类的关键是class,而定义接口的关键字是interface
2.继承抽象类关键字extends,而实现接口关键字implements
3.继承抽象类支持单继承,而实现接口支持多实现
4.抽象类有构造方法,但是接口没有
5.接口中所有的成员变量都必须是常量,而抽象类中可以是变量
6.接口中的成员方法都必须是抽象方法,而抽象类中的成员方法可以是普通方法
7.接口中增加方法一定影响子类,而重抽象类中可以不影响

接口中的常量为什么必须使用public static final修饰

public 作用是修饰符,是公开的,也就是说接口的实现类可以使用这个变量
static 修饰就是表示类的,随着类的加载而存在的,如果不是static的话,就表示属于对象的,只有创建对象才能有它而接口是不能创建对象的,所以接口的常量定义必须为static
final  修饰就是保存接口定义的常量不能被实现类去修改,如果没有final的话,由子类随意修改,接口建立常量将没意义

21_内部类之成员内部类与局部内部类

基本概述

当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类
在一个类体重可以出现的内容:成员变量、成员方法、构造方法、构造块、静态语句块、静态变量、方法、内部类嵌套类:内部类(成员内部类、局部内部类、匿名内部类)静态嵌套类

语法格式

class 外部类类名{class 内部类类名{内部类的类体;}
}

成员内部类

成员内部类定义在另一个类或接口中的内部类注意事项:1.必须先创建外部类对象才能创建成员内部类对象2.不能含有静态变量、静态代码块、静态方法(除了静态常量)3.外部类可以通过成员内部类的对象调用内部类私有成员4.成员内部类是一个独立的类,编译成独立的.class文件作用:成员内部类既可以访问外部类信息,又可以访问父类信息,从而使多继承的解决方案变得完整
//演示成员内部类的使用
public class Outer {private String str = "Outer类的str1";private String str2 = "Outer类的str2";/*第一:内部类名称不能于外部类重名第二:可以使用final、方法修饰符修饰*/public class Inner{private String str = "Inner类的str1";private String str2 = "Inner类的str2";public void show(){//内部类的成员优先于外部类的成员System.out.println(str);System.out.println(str2);//使用"外部类名.this.成员"访问外部类的成员System.out.println(Outer.this.str2);}}
}
public class TestOuter{public static void main(String[] args){//如果要创建内部类,那么在此之前需要先创建外部类对象//创建外部类对象Inner inner = o.new Inner();inner.show();}
}

局部内部类

局部内部类是定义在方法或者代码块里的内部类注意事项:1.不能含有静态变量、静态代码块、静态方法2.只能在定义该类的方法或者代码块中使用,必须在使用前定义3.访问它所有方法的局部变量的时候,局部变量必须是有效的常量4.是一个独立的类,编译成独立的.class文件5.只能使用abstract、final修饰6.定义静态块或方法时候,只能访问外部类的静态成员

图灵学院Java开发笔记相关推荐

  1. 图灵学院java架构师VIP课程学习总结

    最近加入了图灵学院java架构师的学习,着重学习高并发分布式核心架构技术学习,觉得很不错,分享架构大纲和总结的设计模式给大家,想要提升的同学可以在这些方面下点功夫, 课程资料 一:概念及理解 二.单例 ...

  2. 微信公众号Java开发-笔记02【开发接入准备、开发接入】

    学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...

  3. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  4. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

  5. Java开发笔记(一百零三)线程间的通信方式

    前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...

  6. Java开发笔记(二十三)数组工具Arrays

    数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...

  7. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  8. Java开发笔记(八十六)通过缓冲区读写文件

    前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...

  9. Java开发笔记(八十八)文件字节I/O流

    前面介绍了如何使用字符流读写文件,并指出字符流工具的处理局限,进而给出随机文件工具加以改进.随机文件工具除了支持访问文件内部的任意位置,更关键的一点是通过字节数组读写文件数据,采取字节方式比起字符方式 ...

  10. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

最新文章

  1. 微软亚洲研究院副院长刘铁岩:以计算之矛攻新冠之盾
  2. jw player flash网页播放器 参数说明以及应用配置
  3. 纯python好找工作吗_学西点好找工作吗?
  4. eclipse 中修改 M2_REPO的值--转载
  5. DBController心得之一:利用DMO对象对SQL2005数据库进行Backup和restore的操作
  6. 资源分享 | 统计学最全思维导图,附下载链接
  7. pytorch checkpoint_pytorch的两种部署方式 web部署与c++部署
  8. 分析攻击IP来源地并画出饼图
  9. 华为交换机关闭Telnet、开启SSH服务命令
  10. Intellij IDEA 14 安装之后
  11. 网易研选大数据架构演进
  12. postgresql-9.6.6主从
  13. 输出单向链表中倒数第k个结点
  14. iPhone iPad分辨率
  15. Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. Job fai
  16. 将数字字符转换成整型数字
  17. Python爬虫学习之数据提取(Beautiful Soup)
  18. Lazada代入驻靠谱?Lazada代入驻多少钱?
  19. 【C++笔记】 判断两个数互质(做大公约数为1)
  20. 征途服务器维护后可以判国家吗,12月22日全服更新维护公告

热门文章

  1. 美国3D理发师可剪出球星脸发型
  2. basic计算机编程基础,计算机编程基础(Visual Basic)
  3. 华为手机为什么打不开微信连接到服务器,华为手机微信打不开如何解决? 华为手机微信打不开解决方法介绍!...
  4. 利用Fama-French五因子模型的alpha进行行业轮动
  5. Java中的代理(静态代理和动态代理)
  6. 海洋cms index.php被修改,海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码...
  7. Jetson TK1 配置
  8. (七) 立创EDA之PCB设计示例
  9. jquery的siblings属性和定时器
  10. STM32学习100步之第四十二步——触摸按键驱动程序