文章目录

  • 面向对象4.0
    • 1. 面向对象之继承
      • 1.1 生活中的继承
      • 1.2 Java中的继承
      • 1.3 子类对象创建,会调用父类的构造方法解释
      • 1.4 super关键字【鸡肋】
      • 1.5 继承带来的问题
      • 1.6 重写 Override
      • 1.7 重写注意事项
      • 1.9 重写的问题
    • 2. abstract关键字【重点】
      • 2.1 abstract关键字语法要求
      • 2.2 abstract使用总结
    • 3. final关键字
      • 3.1 基本语法
      • 3.2 final面试题
    • 4. static关键字【重点】
      • 4.1 static修饰静态成员变量
        • 4.1.1 为什么要使用静态成员变量

面向对象4.0

1. 面向对象之继承

1.1 生活中的继承
王多鱼二爷的遗产你长的真像你爹遗传,继承!!!开发中使用继承最多的地方:游戏开发!!!LOL血量,蓝量,攻击力,法术强度,攻击速度,护甲,魔抗,CD,移动速度,物理穿甲,法术穿甲,物理吸血,法术吸血....这里会考虑将所有的通用属性,封装成一个类,通过【继承】让每一个英雄类都可以使用到这些属性。这个类叫做【基类】.
1.2 Java中的继承
关键字extends 继承使用关键字
格式:class A extends B {}A类是B类的一个子类B类是A类的唯一父类Java语言是一门单继承语言。继承效果1. 子类可以通过继承使用父类的非私有化成员变量和成员方法2. 子类无法通过继承使用父类的私有化成员变量和成员方法
1.3 子类对象创建,会调用父类的构造方法解释
1. 构造方法是用来做什么的???创建对象 new + 构造方法(); new 申请内存【堆区】空间,并且擦除所有数据构造方法用于初始化当前类对象成员变量或者一些必要数据。构造方法没有创建对象的能力,只做【初始化操作】2. 子类对象可以通过继承使用父类的非私有化成员变量和成员方法子类对象所占用的内存【堆区】空间中,是有对应父类成员变量和成员方法的内存空间。开发中:所有的数据,方法,数据类型都要占用一定的内存空间,程序运行是离不开内存的。

1.4 super关键字【鸡肋】
1. super区分子类和父类同名内容。
2. 通过super关键字调用父类的构造方法[后面讲 Exception]
package com.qfedu.a_extends;class Person {public String name;public int age = 10;public void work() {System.out.println("Person类work方法");}
}/*** super关键字区分父类和子类同名内容* @author Anonymous**/
class SinglePerson extends Person {public int age = 20;public void work() {System.out.println("SinglePerson类work方法");}/** super关键字可以解决父类和子类同名内容情况。*/public void test() {// 子类和父类有同名内容情况下,默认为就近原则System.out.println(age);// 通过super明确告知编译器,这里使用的age是父类成员变量ageSystem.out.println(super.age);// 调用方法也是采用就近原则work();// 通过super明确告知编译器这里调用的是父类的work方法。super.work();}
}public class Demo3 {public static void main(String[] args) {}
}
1.5 继承带来的问题
Java中继承主要目的1. 制定规范2. 继承可以进行方法传递,子类可以使用父类的方法,简化开发流程子类通过继承可以使用父类中的成员方法,但是父类成员方法
无法满足子类的特殊情况。                    为了降低程序员的开发压力,面向对象语言中,引入了一个【重写】概念
1.6 重写 Override
重写:用于在不增加方法量的情况下,解决父类方法无法满足子类使用情况。重写方法要求1. 子类和父类方法声明完全一致。权限修饰符 返回值类型 方法名(形式参数列)2. 子类重写父类方法,可以修改方法体内容,来满足子类情况3. 通常情况下,会使用注解 @Override来开启严格格式检查。
package com.qfedu.b_override;/*** LOLHero基类* @author Anonymous**/
class LOLHero {public void Q() {System.out.println("Q方法");}public void W() {System.out.println("W方法");}public void E() {System.out.println("E方法");}public void R() {System.out.println("R方法");}
}/*** 锤石类* @author Anonymous**/
class Thresh extends LOLHero {/** 重写之后,父类和子类方法声明完全一致,并没有增加方法的记忆压力* 只不过修改了子类方法体内容,从而更加合适子类的使用情况!!!*/@Overridepublic void Q() {// TODO todo是未完成代码标记,需要在todo注释之后完成代码System.out.println("死亡判决");}@Overridepublic void W() {System.out.println("魂引之灯");}@Overridepublic void E() {System.out.println("厄运钟摆");}@Overridepublic void R() {System.out.println("幽冥监牢");}
}/*** 维鲁斯类* @author Anonymous**/
class Varus extends LOLHero {@Overridepublic void Q() {System.out.println("穿刺之箭");}@Overridepublic void W() {System.out.println("枯萎箭袋");}@Overridepublic void E() {System.out.println("恶灵箭雨");}@Overridepublic void R() {System.out.println("腐败锁链");}}public class Demo1 {public static void main(String[] args) {/** 子类通过继承可以使用父类中的成员方法,但是父类成员方法* 无法满足子类的特殊情况。* * 为了降低程序员的开发压力,面向对象语言中,引入了一个【重写】概念*/Thresh goulei = new Thresh();goulei.E();goulei.R();goulei.W();goulei.Q();System.out.println();Varus saolei = new Varus();saolei.E();saolei.W();saolei.R();saolei.Q();}
}
1.7 重写注意事项
1. 重写是建立在继承或者遵从[implements]关系之上的。通常是由子类或者实现类完成的。2. @Override 注解 ==> 注释 + 解释开启重写严格格式检查。【编译时作用】3. 重写可以简化代码结构,在不增加方法的情况下,满足子类的特殊使用情况。
1.9 重写的问题
 LOLHero类内有QWER方法,这里其实是要求子类按照自己的需求来完成重写的,但是代码没有从【语法】角度进行强行约束。目前缺少让子类重写方法的【强制要求】这里需要使用abstract关键字

2. abstract关键字【重点】

2.1 abstract关键字语法要求
abstract修饰的方法要求子类必须强制完成/强制重写!!!
package com.qfedu.c;/*
abstract关键字使用 Eclipse操作引导第一个问题:Abstract methods do not specify a bodyabstract修饰的方法,不允许有方法体快速修复:Ctrl + 1Remove method body;删除当前abstract修饰方法的方法体。第二个问题:The abstract method Q in type LOLHero can only be defined by an abstract class在LOLHero类内abstract修饰的方法q,有且只能定义在abstract修饰的类内The type LOLHero must be an abstract class to define abstract methodsLOLHero类必须是一个abstract修饰的类,才可以定义abstract修饰的方法快速修复:Ctrl + 1 Make type 'LOLHero' abstract第三个问题:The type HappyWindBoy must implement the inherited abstract method LOLHero.Q()HappyWindBoy类因为继承LOLHero类,必须实现LOLHero类内的abstract修饰的方法 Q();快速修复:Ctrl + 1Add unimplemented method;添加未实现的方法*/
/*** LOLHero基类* @author Anonymous**/
abstract class LOLHero {abstract public void Q();abstract public void W();abstract public void E();abstract public void R();
}/*** 快乐风男* @author Anonymous**/
class HappyWindBoy extends LOLHero {@Overridepublic void Q() {System.out.println("斩钢闪");}@Overridepublic void W() {System.out.println("风之障壁");}@Overridepublic void E() {System.out.println("踏前斩");}@Overridepublic void R() {System.out.println("狂风绝息斩");}}/*** 提莫类* @author Anonymous**/
class Timor extends LOLHero {@Overridepublic void Q() {System.out.println("你瞎吧");}@Overridepublic void W() {System.out.println("溜~~~");}@Overridepublic void E() {System.out.println("呵 tui~~~");}@Overridepublic void R() {System.out.println("蹦沙卡拉卡");}}public class Demo1 {public static void main(String[] args) {HappyWindBoy happyWindBoy = new HappyWindBoy();happyWindBoy.Q();happyWindBoy.W();happyWindBoy.E();happyWindBoy.R();Timor timor = new Timor();timor.Q();timor.W();timor.E();timor.R();}}
2.2 abstract使用总结
1. abstract关键字目前只要求了解语法规范。【实际使用和开发使用,后期项目中讲解】2. abstract修饰的方法不能有方法体,有且只有方法的声明,这里只是在当前类内告知编译器,这里定义了一个方法的声明。3. abstract修饰的方法,有且只能存在于abstract修饰的类内,或者interface接口内4. 一个普通类如果继承abstract修饰的类需要完成abstract类内的所有abstract修饰方法,【语法强制要求】5. abstract修饰的类请问有没有类对象???abstract修饰的类不能创建自己的类对象,因为abstrat修饰的类内可能存在abstract修饰的方法,而abstract修饰的方法没有方法体,无法通过类对象调用执行。

3. final关键字

3.1 基本语法
成员变量final修饰的成员变量,定义时必须初始化,并且无法被重新赋值。
成员方法final修饰的成员方法,不能被子类重写,为最终方法。
局部变量final修饰的局部变量一旦被赋值无法修改!!!
类final修饰的类不能被子类继承,没有子类断子绝孙代表之作:Java中的String字符串类就是一个final修饰的类
3.2 final面试题
package com.qfedu.d_final;class Person {public String name = "苟磊";public int age = 16;
}public class Demo2 {public static void main(String[] args) {final Person person = new Person();System.out.println(person.name + " " + person.age);/** 一下操作那些正确,那些错误?* * 请问:*       这里是指向不可变,还是指向内容不可变???* * 这里final Person person 实际上修饰的内容是person引用数据类型变量* 也就是说当前引用数据类型变量中保存的数据是不能修改的!!!* 引用数据类型变量保存的数据是地址,地址指向不得改变。* * 指向空间中保存的数据内容是可以改变的!!!* * 生活例子:*        你买的房子地址不会发生改变,但是房子内部的装修装饰是可以发生改变。*/// person = new Person();person.name = "航海中路彭于晏";person.age = 6;}
}

4. static关键字【重点】

4.1 static修饰静态成员变量
4.1.1 为什么要使用静态成员变量
 开发中存在一些共享数据,这些数据存在于每一个类对象中,并且一致数据!!!如果每一个对象都存储当前数据,会导致大量的资源浪费!!!共享单车共享资源,共享经济1. 共享单车不占用用户空间。占用公共空间。2. 共享单车是否与你有关???所属权归共享单车的运营公司每一个用户拥有使用权。3. 共享单车被XXX卸了座,大家都无法使用。4. 你来到北京之前,共享单车已经存在,你走之后,共享单车依然存在。饮水机共享资源1. 占用共享空间,不占用用户空间2. 饮水机与你有关?只能使用所属权归千锋郑州校区3. 饮水机里面放了巴豆,蹦沙卡拉卡...4. 你来千锋之前,饮水机在这里,你走之后,它还在这里。

【java初学】面向对象继承相关推荐

  1. 包机制、访问修饰符、Jar包 java初学 面向对象五

    包机制 问题:当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 使用package 关键字. package 包名. ...

  2. 面向对象 java初学

    面向对象 万物皆对象 我们是怎么认识世界的? 人类从小就不断的接触到各种各类存在世界上的各种生物,然后通过事物的公共特性,将它们归类,所以以后就不会出现见到猫叫老虎.那么我们在现实生活中,是通过具体的 ...

  3. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  4. Java模式设计卖电脑实验报告,面向对象(Java)实验0继承、接口和多态

    <面向对象(Java)实验0继承.接口和多态>由会员分享,可在线阅读,更多相关<面向对象(Java)实验0继承.接口和多态(11页珍藏版)>请在金锄头文库上搜索. 1.电子信息 ...

  5. java继承类大全_Java 面向对象继承部分(示例代码)

    被继承的类称为父类(超类),继承父类的类称为子类(派生类) 通过继承可以实现代码重用 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以 ...

  6. java c 面向对象比较教程_c语言初学指针,对于java面向对象的初理解

    最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...

  7. java之面向对象:继承extends、super、覆盖override的用法

    继承的好处: 1 )提高了代码的复用性. 2 )让类与类之间产生了关系,给第三个特征多态提供 了前提. java支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有 ...

  8. Java 面向对象-继承

    1.继承的概述 泛指把前人的作风.文化.知识.财产等接受过来 java中的继承 让类与类之间产生父子关系 被继承的类叫做父类(基类.超类) 继承的类叫做子类(派生类) 格式(extends) clas ...

  9. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

最新文章

  1. 视觉Transformer快速入门指南!
  2. Spring集成Mybatis,spring4.x整合Mybatis3.x
  3. android 中system 如何打包编译生成的
  4. NetBeans无法使用编码GBK安全打开文件
  5. Mvc 页面缓存 OutputCache VaryByCustom
  6. matlab中方差直方图,如何规范直方图在MATLAB?
  7. [译]不要在UI主线程中进行耗时的操作
  8. 使用公用计算机的用户如何,如何通过设置权限来管理公用电脑?
  9. html 中 float 的一些研究
  10. JavaScript学习(七)
  11. 不用if比较两个数大小
  12. 银行也想拥抱区块链,但发现实在太难了
  13. 一亩三分地-每日答题
  14. 高光谱图像去噪相关资源汇总(常用对比算法+数据集+评价指标)
  15. 硬盘分区表格式GUID和MBR知识普及
  16. MySQL数据库文件
  17. 基于Python命令行的NBA文字直播小工具
  18. Android 10 设置壁纸流程
  19. for循环中抛出异常_不要抛出循环!
  20. 【IPTV】烽火通信再次中标上海电信高清视讯平台项目

热门文章

  1. 沙拉划词+福昕 文献翻译
  2. 对流氓软件应群起攻之
  3. autojs pro采用递归的方式,遍历所有子控件的源码分享
  4. 苹果6plus性能测试软件,iPhone 6、iPhone6 Plus性能测试
  5. 【PHP注入01】PHP语言常见可注入函数(eval、assert、preg_replace、call_user_func、$a($b)等)
  6. python网络图片下载---跟我一起爬王者农药皮肤吧
  7. 你有什么道理后悔没早点知道
  8. golang go doc 与 godoc 文档生成查看
  9. Istio服务网格详解
  10. 《Python从入门到实践》读书笔记——第五章 if语句