[笔记][java 4 android] [020~028]复写、转型、抽象、打包、权限、异常
来源:互联网 发布:淘宝天猫美工尺寸 编辑:程序博客网 时间:2024/05/16 15:10
【020】override函数的复写
对父类的构造函数进行某种改写使用super调用父类的成员函数
override:
在具有父子关系的两个类中,存在同样定义的成员函数,子类中的成员函数会对父类的成员函数进行override.
如:
class Person{ String name; int age; void introduce(){ System.out.println("我的名字是"+name+" 我的年龄是"+age); }}
class Student extends Person{ String addr; void studing(){ System.out.println("学习ing"); } void introduce(){ super.introduce(); //调用父类的introduce System.out.println("我的家在"+addr); }}
class test{ public static void main(String arg []){ Student s = new Student(); s.name ="张山"; s.age = 12; s.addr = "地球"; s.introduce(); }}
Tips:
调用成员函数和调用构造函数不同,位置无严格要求。
【021】对象的转型
对象的向上转型和向下转型
1、向上转型:将子类的对象赋值给父类的引用Tips:一个引用能调用那些成员变量和函数,取决于引用的类型。
一个引用调用的是哪一个方法,取决于引用指向的对象。如:Student s = new Student();Person p = s;
s和p指向同一个对象。p.addr和p.studing()是无法编译通过的。(Person类引用无法调用Student类的成员变量和函数)但是p.introduce()调用的是子类的introduce()函数。(p指向了一个Student类对象)2、向下转型:将父类的对象赋值给子类的引用Tips:一定要先向上转型再向下转型如:Student s1 = new Student(); Person p = s1; //先向上转型Student s2 = (Student)p; //再强制转型为子类(向下转型)
s1,s2,p指向同一个对象。
【022】面向对象应用
呃,有经验的不用看了
【023】抽象类和抽象函数
1、只有函数的定义,没有函数体的函数成为抽象函数如:abstract void func();
2、使用abstract定义的类是抽象类
Tips:抽象类不能生成对象,但是其子类可以生成对象,override抽象父类中的抽象函数一个类中包含抽象函数,则必须声明这个类为抽象函数如果一个类中没有抽象函数,也可以声明为抽象类抽象类也是有构造函数的(子类一定会调用父类的构造函数)如:abstract class Person{ abstract void eating();}class chinese extends Person{ void eating(){ //这个成员函数override了父类的抽象函数 }}chinese c1 = new chinese(); //这样是可以编译通过的
*抽象类专门作父类的[´・ω・`]
【024】为啥要用抽象类呢~
用一个例子来说明~
声明一个抽象类,包含一个抽象函数
abstract class Print{ void open(){ System.out.println("open the printer"); } void close(){ System.out.println("close the printer"); } abstract void printing();}
声明这个抽象类的子类1class HPPrint extends Print{ void printing(){ System.out.println("使用HP打印机进行打印"); }}
声明这个抽象类的子类2class CNPrint extends Print{ void printing(){ System.out.println("使用Canon打印机进行打印"); }}
测试用例class test{ public static void main(String arg []){ Print p1 = new HPPrint(); p1.open(); p1.printing(); p1.close(); Print p2 = new CNPrint(); p2.open(); p2.printing(); p2.close(); }}
结果如下也就是说,在一定需要子类进行不同的函数操作时,抽象父类是很必要滴~~~
【025】包
(终于到了很特色的东西了[´・ω・`]
1、打包~这个不解释了- -命名空间的一个东东Tips:需要使用package 包名;编译指令更换为javac -d 目录 x.java一个类的全名是包名.类test.java如下:package com.android.google;class test{ public static void main(String arg []){ System.out.println("hello package"); }}
编译指令为:javac -d . test.java//要求在文件夹根目录(.)下生成一个文件夹(包)这样的话就是在目录下生成了对应的class文件,而目录如下(和.有关系,一个点就多一个层级)
生成包后,执行注意类名已经变化,为包名.类名java com.android.google.testTips:包名的命名规则1、小写2、一般情况下是域名倒过来写,如google.android.com---包名就是com.android.google
【026】包的访问权限
public 公共private 私有default 包级别protected 受保护权限都是和包有关系的
Tips:public
- 能修饰类、成员变量和成员函数
- 当一个类是public权限,类名必须和文件名一样
- 可以从外部调用public权限的成员变量和函数
private
- 在普遍情况下不能修饰类,但是能修饰变量和函数
- 当一个类中的成员变量和函数为private权限时,只能本类中使用
default(默认权限)
- 能修饰类、成员变量和成员函数
- 只有在同一个包中才能调用的权限设置,不同包是不可以调用的
protected
- 和继承关系较大
*导入类机制import 类名;如:在PB包的B类中想要使用PA里的A类,则有import PA.A;如果是PA包里的所有类,则是import PA.*;
【027】继承和权限
protected权限和default权限同级,但是protected只能修饰成员变量和成员函数只有子类能访问父类的protect的跨包访问,但是不允许非子类的跨包访问Tips:如果子类和父类不在同一个包中,则子类无法访问父类的非public和非protected成员变量和成员函数如:Person.javapackage com.kaigara;//Person类需为public,因为Student要在另外的包里调用public class Person{ //这两个变量需为public,因为Student要在另外的包里调用 public String name; protected int age; void eating(){ System.out.println("eating"); } void sleeping(){ System.out.println("sleeping"); }}Student.javapackage cn.kaigara;import com.kaigara.Person;class Student extends Person{ void introduce(){ System.out.println("我的名字是"+name+" 我的年龄是"+age); }}test.javapackage cn.kaigara;import com.kaigara.*;class test{ public static void main(String arg []){ Person p1 = new Person(); p1.name = "zhangsan"; p1.age = 11; }}
结果如下,test类中无法访问Person类中protected int age
权限从大到小:public | 公共使用 > protected | 父子类跨包使用 > default | 包内使用 > private | 类内使用
【028】异常
中断正常指令流的事件,也就是说程序在运行时出现的错误,而非编译的时候。JDK提供的异常类(继承关系结构图):只能处理Exception,不能处理Error
- check exception 需要被处理(RuntimeException及子类)
- uncheck exception 不强制处理
如:class checktest{ public static void main(String arg []){ System.out.println("1"); try{ int i = 1/0;//可能异常的代码放到try里,在异常代码后的代码不再进行 System.out.println("2"); } catch(Exception e){ //不出异常时此代码块不会执行 e.printStackTrace(); System.out.println("2-catch"); } finally{ //一定会被执行的代码块 System.out.println("finally"); } System.out.println("3"); }}
*这几课涉及到java特色的一些知识点,理解之后还是比较容易的,但是明显比之前看的要慢咯~很多都是基础,先打好~
- [笔记][java 4 android] [020~028]复写、转型、抽象、打包、权限、异常
- 黑马程序员---类型转换异常,多态中的转型,抽象类。第十天学习笔记
- java抽象类。抽象类里面的抽象方法必须被子类全部复写
- Java学习笔记-向上转型,向下转型
- JAVA笔记六(21-24 对象转型(多态性)、面向对象应用、抽象类和抽象函数)
- 5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类
- java 抽象类 抽象方法被调用 static 方法不能被复写
- 对象的转型,抽象类,包的访问权限
- JAVA学习笔记-函数的复写(override)
- java继承覆盖与向上转型,权限
- java笔记(三)[java中的继承&java中的方法重载,重写,重构&java中的向上转型和乡下转型&java中的抽象类和接口&java中的接口向上转型]
- java-多态转型异常案例
- java笔记4异常
- Android复写按钮方法
- java 函数复写小结
- Guava学习笔记【4】:复写的Object常用方法
- java 继承 方法重写 自动转型 多态 接口 抽象类
- java 继承 方法重写 自动转型 多态 接口 抽象类
- 零零散散学算法之详解RMQ & LCA
- Linux PAM make err : undefine yywrap()问题
- C# 关闭登录窗体,进入主窗体后,主窗体关闭,程序进程仍在运行的问题
- google hosts无法访问
- JDK1.6自带工具介绍
- [笔记][java 4 android] [020~028]复写、转型、抽象、打包、权限、异常
- 深入探讨 Java 类加载器
- 关键字static的作用
- JS中var self =this; 或者 JS var _this =this;
- hdu4009 Transfer water ( 最小树形图的模板 )
- Deploying OpenStack-第四章 理解Nova
- python学习记录
- Mindjet 11 RunTime Error, R6025, pure virtual function call 移动文件后打开出错
- c++实现万年历,从公元1年1月1日开始,这一天是星期一