Java -2
来源:互联网 发布:分区表丢失数据恢复 编辑:程序博客网 时间:2024/05/17 07:52
面向对象的三大特征
继承封装/隐藏多态 - - 使代码变得更通用
继承
建模、代码复用。子类继承父类,可以得到父类的全部属性和方法(父类构造方法除外)Java中只有**单继承**Java中的多继承可以通过接口实现如果定义一个类,没有调用 extends ,则它的父类是 Java.lang.Object不同的叫法 :超类、父类、基类、子类、派生类一个类只有一个直接父类。
组合
提高代码的复用度
final
修饰变量: 常量修饰方法: 该方法不可被子类重写,但是可以被重载。修饰类: 修饰的不能有子类,不能被继承 。比如 :Math、String
package com.java;public /*final*/ class demo1 {//修饰的类不能被继承 String name; int age; public final void test() { System.out.println("test"); }}class demo2 extends demo1 { //public void test() { //此方法不可被重写 // System.out.println("test"); //} public void test(String name) { //此方法可被重载 System.out.println("test"); }}
封装/隐藏
高内聚: 就是类的内部数据操作细节自己完成,不允许外部干涉低耦合: 仅暴露少量的方法给外部使用。使用 访问控制符 实现封装 | | 同一个类 | 同一个包 | 子类 | 所有类 | |———————————|—————————|———————— |——————|———————| | private | * | | | | |———————————|—————————|———————— |——————|———————| | default | * | * | | | |———————————|—————————|———————— |——————|———————| | protected| * | * | * | | |———————————|—————————|———————— |——————|———————| | public | * | * | * | * |封装 : 类属性处理: · 一般使用private (除非本属性去顶让子类继承) · 提供相应的 get/set 方法来访问相关属性,这些方法通常是public ,从而提供对属性的操作 (注意 boolean 变量的 发get方法 是用 :is 开通) 一些只用于本类的辅助性方法可以用 private其他类调用的方法用 public
多态
多态是oop中的一个重要属性,主要用来实现动态联编多态存在的三个必要条件 要有继承 要有方法重写 父类引用指向子类对象
package com.java;public class demo1 { String str; public void voice() { System.out.println("test"); }}class Cat extends demo1 { @Override public void voice() { System.out.println("Cat"); }}class Dog extends demo1 { @Override public void voice() { System.out.println("Dog"); }}
测试
package com.java;public class demo2 extends demo1 { //ceshi public static void test(demo1 demo1){ demo1.voice(); } public static void main(String[] args) { demo1 dog =new Dog(); test(dog); }}
抽象类 abstract
是一种模板模式 ,抽象类为所有子类提供一个通用模板,子类在模板上进行扩展。通过抽象类,避免子类设计的随意性要点: · 有抽象方法的类只能定义抽象类 · 抽象类不能进行实例化 · 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new 实例 ,只能用来被子类调用。 · 抽象类只能又来继承 · 抽象方法必须被子类实现
package com.java;public abstract class demo { String name; public abstract void run(); public void test() { System.out.println("ssss"); }}class rrrr extends demo { @Override public void run() { System.out.println("ssssttt"); }}
接口
接口中只有 常量和抽象方法
package com.java;public interface demo { /*默认会存在*/ public static final String NAME="ss"; /*public static final*/ String AGE="ss"; /*public abstract*/ int aaa(); int bbbb(int a,int c);}
回掉
也称 : 模板方法模式CallBack
可以使用 抽象类 也可以使用 接口package com.java;public abstract class demo { public abstract void aaa();}class bbb extends demo { @Override public void aaa() { System.out.println("啦啦啦啦啦啦!"); }}
package com.java;public class demo1 { public static void ffff(demo demo) { System.out.println("开始"); System.out.println("处理"); demo.aaa(); System.out.println("结束"); } public static void main(String[] args) { ffff(new bbb()); }}
内部类 innerclasses
一般情况下,把类定义成独立的单元。有些情况写,我们把类放在另一个中的内部定义 ,称作内部类作用: · 提供了更好的疯涨,只能通过外部类直接访问 ,不允许同一个包中的其他类直接访问。 · 内部类可以直接访问外部类的私有属性,内部类被当作成其外部类的成员。但外部类不能直接访问内部类的内部属性 · 通常内部类在只为外部类提供服务的情况下优先使用。非静态内部类 · 非晶态内部类必须寄存在一个外部类对象例,因此 ,如果有一个非静态内部类对象那么一定存在对应的外部类对象。 非静态内部类对象单独属于外部类的某个对象。 · 非静态内部类可以使用外部类的成员,但是外部类不能直接访问非静态内部类的类成员 · 非静态内部类不能有静态方法,静态属性,静态初始化块 · 静态成员不能访问非静态成员: 外部类的静态方法,静态代码块不能访问非静态内部类,包括不能使用非晶态内部类定义变量,创建实例。 · 成员变量访问: 内部类里方法的局部变量:变量名 内部类属性: this.变量名 外部类属性: 外部类名.this.变量名
package com.java;public class demo1 { public static void main(String[] args) { aaa a = new aaa(); aaa.bbb b = a.new bbb(); b.test(); }}class aaa { int str; class bbb { String type; void test() { String str = this.type; System.out.println(aaa.this.str); } }}
静态内部类
当一个静态内部类存在,并不一定存在对应的外部类对象静态内部类可以看作外部类的一个静态成员
package com.java;public class demo1 { public static void main(String[] args) { aaa.bbb name=new aaa.bbb(); name.test(); }}class aaa { String str; static class bbb { String type; void test() { String strs = this.type; } }}
数组
数组是相同类型数据的有序集合特点: · 其长度是确定的 · 其元素类型必须是相同类型 · 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
StringBuilder
线程不安全,效率高初始长度16其底层实现是 数组 具体请查看 AbstractStringBuilder 抽象类
StringBuilder
线程安全,效率低初始长度16其底层实现是 数组 具体请查看 AbstractStringBuilder 抽象类
二维数组
请参考 API
数组的拷贝
具体请查看 System Arrays类 system 类包含 static void arraycopy 方法
包装类
包装类位于 java.lang包下
自动拆箱/装箱
package com.java;public class demo2{ public static void main(String[] args) { // 自动装箱 Integer i = new Integer(1); // 自动拆箱 int j = new Integer(1); // int j = new Integer(1).intValue();//本质上编译器编译时添加。 }}
Date
请查看API
DateFormat
查看API
Calendar
查看API
查看API
查看API
File
异常机制
try catch finally throws throw
阅读全文
0 0
- 【java 2】java泛型
- 【Java】(2)Java反射
- Java(2)
- Java-2
- java 2
- Java-2
- Java 2
- java(2)
- Java(2)
- java(2)
- java 2
- Java -2
- Java-2
- Java 2
- Java(2)
- JAVA | 2
- Java: reading Core Java 2
- Java沙箱(Java Sandbox)[2]
- 正则表达式
- Elasticsearch 插入索引文档 和特殊的字段类型
- [java]插入排序及折半插入排序
- aidl原理解析
- Python 中文编码
- Java -2
- servlet(1)
- 联系人号码显示匹配规则
- 初识指针(初学者)
- 文章标题
- C#操作word,自己的一些整合
- Java反射机制(适合初学者)
- jdk8ConcurrentHashMap
- Java面试