2017-09-20

什么是抽象类:

一个类中没有包含足够的信息来描绘一个具体的对象;用abstract修饰的类就是抽象类;抽象类中不一定有抽象方法;但是有抽象方法就一定存在于抽象类中;

抽象类只能用作父类,表示继承关系。继承抽象类的子类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类。

定义抽象类:

【访问权限】abstract  class 类名 {成员列表}

抽象方法:

在类中没有方法体的方法,称之为抽象方法;

抽象方法的声明:

【访问权限】abstract 返回值类型 方法名称(参数列表);

作用:可扩展性好;可优化程序;

多态性:

体现在:方法重载;方法覆盖;多态参数;

①:编译期类型与运行期类型相同;

A  a = new A();

a.show();

在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到类A中去验证。

构造方法A()中的A是运行期类型,在运行期,将执行运行期类型中的方法

②:当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型是父类类型,运行期类型是子类类型;

//A类是B类的父类

A  ab = new B();

ab.show();

对象ab的编译期类型为父类A类,运行期类型为子类B类。

如果一个引用的编译期类型和运行期类型不同,那么一定是编译期类型与运行期类型有父类子类关系。

多态环境下对成员方法的调用:

编译在左,运行在右;

多态环境下对静态成员方法的调用:

编译在左,运行也在左;

多态环境下对成员变量的调用:

简单的说:编译和运行都看等号左边。

注意:变量不存在被子类覆写这一说法,只有方法存在覆写。

父类:

public class Anmainal {

String name = "动物";

//方法

void eat(){

System.out.println("父类 : 吃饭");

}

Anmainal(){

System.out.println("父类 :构造方法");

}

static void jump() {

System.out.println("父类 :jump ");

}

}

子类1:

public class Cat extends Anmainal  {

String name = "猫";

void eat() {

System.out.println("猫   子类 : 吃饭");

}

void drink(){

System.out.println("猫   子类 :喝水");

}

Cat(){

System.out.println("猫   子类 :构造方法");

}

static void jump() {

System.out.println("猫    子类 :jump ");

}

}

public class Main {

public static void main(String[] args) {

Anmainal  A=new Cat();

A.eat();    //结果:猫   子类 : 吃饭

System.out.println(A.name);    //结果:动物

A.jump();       //调用静态方法时,出现父类的结果

Cat  B = (Cat) A;  //需要强制转换,子类中创新的方法才能出现结果

B.drink();

System.out.println(B.name); //需要强制转换,子类中属性才能出现结果 }

父类引用指向子类对象:

当编译器类型是父类,运行期类型是子类时,被称为父类引用指向子类对象;

class  Animal{        //父类

……

}

class Cat  extends Animal{

……    //子类Cat

}

class Dog extends Animal {

……    //子类Dog

}

Cat m = new Cat()

Animal x = new Cat()  //Animal 的引用指向Cat的对象

对象m可以调用猫类中的所有方法,x只能调用动物类中定义的方法,

猫类扩展的新方法不能调用。     (例子如上)

多态参数:

方法参数具有多态性:

父类:

public class Anmainal {

String name = "动物";

//方法

void eat(){

System.out.println("父类 : 吃饭");

}

Anmainal(){

System.out.println("父类 :构造方法");

}

static void jump() {

System.out.println("父类 :jump ");

}

}

子类猫:

public class Cat extends Anmainal  {

String name = "猫";

void eat() {

System.out.println("猫   子类 : 吃饭");

}

void drink(){

System.out.println("猫   子类 :喝水");

}

Cat(){

System.out.println("猫   子类 :构造方法");

}

static void jump() {

System.out.println("猫    子类 :jump ");

}

}

子类狗:

public class Dog extends Anmainal{

String name = "狗";

void eat() {

System.out.println("狗          子类 : 吃饭");

}

void drink(){

System.out.println("狗         子类 :喝水");

}

Dog(){

System.out.println("狗          子类 :构造方法");

}

static void jump() {

System.out.println("狗          子类 :jump ");

}

}

public class Main {

public static void main(String[] args) {

Anmainal A1 = new Anmainal();

Cat B = new Cat();

Dog D = new Dog();

A1.eat();

B.eat();

D.eat();

}

void sing(Anmainal  A1) {

A1.eat();

}

}

多态环境下对象造型:

向上造型 –又称自动类型提升:

class Animal{

abstract void eat();

}

class Cat extends Animal{

void look() {

System.out.println("看家");

}

}

………

Animal x=new Cat()  //向上造型,Cat对象提升到Animal对象

x.eat()   //只能使用父类中的方法

x.look()  //报错!不能使用子类中的方法

向上造型的作用是:提高程序的扩展性。

向下造型 –又称向下转型:

class Animal{

abstract void eat();

}

class Cat extendsAnimal{

void look() {

System.out.println("看家");

}

}

………

Animal x=new Cat()

Cat  m=(Cat)x;  //向下转型

m.eat() ;

m.look();//子父类中的方法都可以使用

向下造型的作用是:为了使用子类中的特有方法。

时间: 2024-10-31 17:02:24

2017-09-20的相关文章

调试大叔V1.0.1(2017.09.01)|http/s接口调试、数据分析程序员辅助开发神器

2017.09.01 - 调试大叔 V1.0.1*支持http/https协议的get/post调试与反馈:*可保存请求协议的记录:*内置一批动态参数,可应用于URL.页头.参数:*可自由管理cookie:*支持请求的代理与模拟环境参数设置:*时间戳管理(取网络当前时间戳.转成日期.转成倒计时):*支持拖放文件到本程序窗计算文件的MD5.SHA1.CRC32值:*集成常见编码解码(Ansi与Utf8互转.URL加解密.UniCode转中文);*集成常用符号与其UniCode值:*集成常用数学计算

【转】DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10

[转]DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10 分类: Linux 由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数.数据块数.行长等信息:列的分析--列值的重复数.列上的空值.数据在列上的分布情况:索引的分析-索引页块的数量.索引的深度.索引聚合因子)

【2017.09.29 星期五 关于c++瞎侃】

c++中最重要的语法特征就是 类 了,通过它,程序员可以自定义自己的数据类型. c++中的类包含 数据成员 也 包含 函数成员. C++语言主要的一个设计目标 就是让程序员自定义的的数据类型向 内置类型一样 好用. 基于此, 标准c++库 实现了丰富的类和函数. 野心很大 [2017.09.29 星期五 关于c++瞎侃]

2017.12.20 Python 文件I/O

2017.12.20 Python 文件I/O 1.open参数及Character作用 open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) ========= ===============================================================Character Meaning--------- ------------

2017.12.20 2周3次课

2017.12.20 二周第三次课 2.14 文件和目录权限chmod 命令chmod( change mode的简写 )用于改变用户对文件/目录的读写执行权限 其格式为:chmod [-R] xyz文件名(这里的xyz表示数字).其中,·-R选项的作用等同于chown命令的一R选项,也表示级联更改. 属性的含义: [r]:读 : [w]:写: [x]:执行: [-]:不可以: 值得注意的是,在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644. 为了方便更改文件的权限,

无垠PE组合工具2017.09.03 维护版网络版

适合大众--无垠PE组合工具,维修维护专用--简洁实用.功能俱全,赢得信赖! 无垠PE及工具都源于无忧启动论坛所得,无OEM或个人信息,不修改主页.不写垃圾文件.无广告.无暗扣.无陷阱!采用Win8PEx64内核.工具网络全内置,支持UEFI启动.可量产.刻盘.U+/B+.无垠PE组合工具修改版由网友"恋梦"更新维护,在原版基础适当精简后,针对里面工具进行升级,精简不常用工具,维护系统完全够用!123 新版变化 2017.09.03 更新- Acronis True Image 201

2016/09/20

1. Python序列化之pickle模块 - 用于[python特有的类型]和[python基本数据类型]间进行转换 - pickle模块提供了四个功能:dumps.dump.loads.load - json更加适合跨语言 基本数据类型的序列化  pickle仅适用于python 复杂类型的序列化 # import json # dic = {'k1': 'v1'} # print(dic, type(dic)) # # res = json.dumps(dic) # 将python的基本数

2017/08/20 工作日志

最近加班和琐事好多,差点断了习惯,今日解决了一大堆,不过还有不少,但感觉已经好很多了,日常以后就不写在这边了,还是以贴技术部分的参考为主. 2017/08/09 从这一天开始被卡在ZTree的地区树上好几天,几乎没有进展,思维非常混乱.记录的东西有这几点: 1.类+问号:说明这是可以为null的类型. 2.使用项目引用会自动生成抽取,使用方法是"右键项目-属性页",用w3wp这个进程调试也与这个有关. 2017/08/11 一直没能解决地区树的问题,转到了改其他后台,做了组织机构的添加

Bentley.Microstran.Advanced.09.20.01.21 1CD

Bentley.Limcon.03.63.01.14 1CD Bentley.MSTower.06.20.01.09 1CD Geometric.Glovius.Pro.v3.9.Win32_64 1CD Koch.Glitsch.KG.TOWER.v5.01.013 1CD Latitude Geographics Geocortex Essentials v4.1.3 1CD GeoStru.EasyHVSR.v2014.16.2.155 1CD Gexcon.FLACS.v9.0 1CD

芝麻软件早报2017.11.20

2017年11月20日星期一 [国内资讯]1.世界第一例人类头部移植手术成功实施,地点在中国,用时18小时2.百度首度披露金融版图全景,未来将加速AI商业化3.支付宝与越南"银联"签约,拓展在越出境游业务4.腾讯信用分终于开始启用了:高于630分免押金骑摩拜5.腾讯<光荣使命>手游本周二开启测试,预约人数突破2500万6.中国奢侈品电商报告发布,寺库领跑中国奢侈品电商7.三季度趣店佣金收入增15倍,宜人贷股权激励拖累净利8.银行联手房企布局广东租赁市场,万亿投资在路上9.黑