黑马程序员——继承、final关键字、抽象类
来源:互联网 发布:dfu刷机会清空数据吗 编辑:程序博客网 时间:2024/05/16 09:30
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
<继承>
兴趣是学习编程最好的老师
不积跬步,无以至千里
这辈子没办法做太多事情,所以每一件都要做到精彩绝伦。
1.继承:
1).继承可以增加代码复用,我们可以将现有的类中的属性和方法进行进一步抽取,形成一个"父类",同时其它类可以"继承"自这个类,使用关键字:extends。继承之后,子类将拥有可以被继承的成员变量和成员方法。继承的特点:java中只支持单继承,不支持多继承,但是Java中允许"多级继承"。但是不要仅为了获取其他类中某个功能而去继承,类与类之间要有所属( " is a " )关系。继承关系图:
class 学生{}class 教师{}class 班级{int 楼层;//自己的属性String 门牌号;//自己的属性学生[] stuArray = new 学生[80];//有学员教师 tea = new 教师();//有教师}3.组合关系:class 硬盘{}class 主板{}....class 电脑{//全部都是由其它类对象组成硬盘 yp = new 硬盘();主板 zb = new 主板();...}4.依赖关系:class 学生{}class 教师{}class 校长{//校长依赖于学生类和教师类,紧"耦合"void 谈话(学生 stu){}void 谈话(教师 tea){}}*///人员类class Personnel{private String name;//姓名String sex;//性别int age;//年龄}class Personnel2 extends Personnel{void show(){System.out.println("大家好,我叫:" + name + ",性别:" + sex + ",年龄:" + age);}}class Student extends Personnel2{String classNo;//学号}class Teacher extends Personnel{String subject;//学科}class Employee{String dept;//部门}class Demo {public static void main(String[] args) {Student stu = new Student();stu.name = "张三";stu.sex = "男";stu.age = 20;stu.show();Teacher tea = new Teacher();tea.name = "李四";tea.sex = "女";tea.age = 18;//tea.show();}}
2.继承后子父类之间成员的关系
1).成员变量
class Fu{int num = 5;}class Zi extends Fu{int num = 20;public void show() {int num = 30;System.out.println("num:"+num);//当局部变量和成员变量重名的时候用this来区分System.out.println("this num:"+this.num);//当子类和父类出现了同名变量,用super来区分System.out.println("father num:"+super.num);}}
2).成员方法
class Fu {public void show() {System.out.println("fu show");}public void method() {}}class Zi extends Fu{public void show(){System.out.println("zi show");}}
3).子类中存在和父类成员方法同名的这种现象,叫做重写,复写,覆盖。
<final关键字>
1.final表示最终的,可以修饰类、成员变量、成员方法;
当被final修饰的类是最终类,不能被继承,被final修饰的成员变量是拥有最终值,只能被赋值1次,不能被修改,final的非static的变量,可以先声明后赋值,但只能在构造方法中赋值,而且只能被赋值一次,final的static的变量,必须要在声明时赋值;此值在运行时不允许修改。被final修饰的成员方法是最终的方法,不能被重写。
class Const{public static final double PI = 3.14159;}class Personnel{final int num;final static int num2 = 20;Personnel(){num = 10;}String name;final void say(){System.out.println("我是传智播客的一员");}}class Student extends Personnel{//不能重写父类的final方法/*void say(){}*/}class Demo {public static void main(String[] args) {System.out.println(Const.PI);}}
<抽象类>
1.抽象类,当一个方法不需要定义方法体,可以只有方法声明,此时,这个方法就是一个抽象方法,
抽象方法,使用关键字:使用abstract关键字修饰,一个类中如果有一个抽象方法,那么这个类必须也被声明为abstract(抽象类),一个类成为抽象类后,意味着:此类不能被实例化;就是用来被继承的;如果一个子类继承一个抽象类后,必须要重写父类的抽象方法。否则,子类也必须是抽象的;子类继承抽象类使用extends关键字,同样只能单继承;一个抽象类可以继承另一个抽象类。
2.模板模式
//抽象类用来定义一个模板;abstract class A{}abstract class Personnel{//一个普通方法,子类会自动继承//就是一个模板方法void say(){System.out.println("我是传智播客的一名" + getType());}//让子类去实现的//基本方法abstract String getType();}class Student extends Personnel{//重写父类的getType()String getType(){return "学生";}}class Teacher extends Personnel{//重写父类的getType();String getType(){return "教师";}}class Demo {public static void main(String[] args) {Student stu = new Student();stu.say();Teacher tea = new Teacher();tea.say();}}
3.抽象类中可以有抽象方法,可以有普通方法;也可以有普通的成员变量。然而抽象类中可以不包含抽象方法;也可以什么都不包含;
4.抽象关键字abstract不可以和哪些关键字共存?
1).private :因为一个abstract方法需要被重写,所以不能修饰为private;
2).final:因为一个abstract方法需要被重写。被final修饰的方法是不能被重写的,所以不能同final共存;
3).static:因为一个abstract方法没有方法体。静态方法需要对方法体执行内容分配空间,所以不能同static共存;
- 黑马程序员——继承、final关键字、抽象类
- 黑马程序员—继承与final关键字
- 黑马程序员——final关键字、抽象类
- 黑马程序员——Java基础:继承、final关键字、抽象、接口、多态
- 黑马程序员——第7天——(面向对象)继承,final关键字,抽象类,接口
- 黑马程序员——Java基础---面向对象(继承_概述、关键字final、抽象类)(5) 分类: Java学习笔记
- 黑马程序员_java的继承性- 继承-final关键字-抽象类-接口-多态-异常-包-多线程-
- 黑马程序员—final关键字
- 黑马程序员——面向对象(final关键字、抽象类、模版方法、接口)
- 黑马程序员_JAVA笔记07——面向对象3(继承、final、抽象类、接口)
- 黑马程序员—— 5,继承,子父类,抽象类,接口,final,模板设计
- 黑马程序员——面向对象07(继承、final、抽象类、模版方法、接口)
- final关键字,继承-抽象类
- 黑马程序员—继承,抽象类
- 黑马程序员-----java中final关键字、抽象类、接口总结*
- “黑马程序员”Java中final关键字,抽象类与接口
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- 黑马程序员--继承和final关键字
- 【leetcode】Remove Duplicates from Sorted List II-很精简
- JavaScript排序算法之插入排序
- Tornado
- leetCode:Path Sum
- 大数据与信息隐私
- 黑马程序员——继承、final关键字、抽象类
- 关于Linux系统性能瓶颈定位分析(一),Nginx状态页测试
- (八)写文档的一些感想
- 编程批量添加区域名称(树形结构表)
- 关于Linux系统指令 top 之 %si 占用高,分析实例一
- 《C和指针》经典入门程序
- android shape资源
- 问题详解 比较器的详解
- DirectX 9.0c游戏开发手记之RPG编程自学日志之1 : 开场白