Java入门第二阶段--抽象类+接口+内部类

1.抽象类和抽象方法
使用abstract修饰的类称为抽象类
抽象类的特征
不可以创建对象       可以有构造方法(提供给子类调用的、成员变量、成员方法、静态方法、构造方法、
final修饰的方法(只能被子类调用,不可以被子类重写)、抽象方法
使用abstract修饰的方法叫抽象方法
抽象方法的特征
抽象方法不允许有方法体,只能是分号结尾
含有抽象方法的类必须是抽象类,抽象类中可以包含0个或多个抽象方法
抽象方法必须被子类实现,如果子类不能实现父类中的抽象方法,那么子类也必须是抽象类

通过抽象类,可以避免子类设计的随意性,可以做到严格限制子类的设计,使子类之间更加通用(程序的
可扩展性和可维护性)
什么情况使用抽象类?     父类名称比较抽象,创建对象无意义
Animal动物类——abstract——abstract shout()方法     每一种动物,分别实现发声的方法

2.接口详解
如果一个类中所有的方法均为abstract方法,那么这个类就可以声明为接口
使用interface修饰,是一种数据类型,引用数据类型,
接口中可以包含什么?   
(1)抽象方法 public abstract 方法
(2)非抽象方法(JDK1.8及以后的特性,但必须使用default修饰) public default 方法
(3)属性(public static final 修饰)常量  public static final 可以省略不写
接口不可以定义构造方法,因为他不是类
接口与类的关系?
(1)类去实现接口中的抽象方法,实现关系,implements
(2)一个类存在继承关系,又存在实现关系?extend前?implements前?
继承——父子关系——亲爹      继承在前
实现——实现关系——干爹      实现在后
(3)如果父类与接口中有完全相同的方法(一模一样),子类/实现类所实现的方法是父类的还是接口的?
父类优先于接口,子类实现的是父类中的方法
(4)如果父类中与接口中有同名方法,对子类/实现类 有什么要求呢?
父类与接口中的方法,在子类/实现类中构成方法的重载,否则报错

接口的特征和使用接口的意义
接口的传递性                       接口的继承性(一个接口可以继承很多个接口)(多继承)
接口可以实现设计和实现的分离,抽象出N多不同类的共同点
继承:is a 的关系    三角形 is a 几何图形 
接口: has a 的关系    手机 has a 拍照的功能
接口体现的是一种能力
使用接口实现多态的步骤
(1)编写接口
(2)实现类实现接口中的方法
(3)接口(类型)new  实现类对象
面向接口的编程

3.内部类详解
将一个类定义在另一个类里面叫作内部类
内部类作为外部类的成员,可以直接访问外部类的成员(包括private),反之则不行。
当内部类和外部类有相同的属性的时候,使用外部类属性要加外部类名.this.属性
内部类作为外部类成员,可声明为private、默认、protected或public
内部类成员只有在内部类的范围之内是有效的
用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限
内部类的优缺点:
优点:内部类可以直接访问外部类的私有属性
缺点:破坏了类的结构
内部类的分类
1)成员内部类
内部类相当于外部类的成员
2)静态内部类
静态内部类,不允许访问外部类的非static属性
如果内部类中的方法是static方法,那么内部类也必须是静态的
3)方法中的内部类
只能在方法中使用,相当于方法中的局部变量
JDK1.8新特性
a)JDK1.8之前方法中的内部类要访问外部类的局部变量,必须加final关键字(常量)
b)JDK1.8开始,在访问外部类的局部变量时,则可以不加final关键字
4)匿名内部类(存在继承或实现关系)
a)可以实现一个接口,或者继承一个父类
b)只能实现一个接口
c)适合创建那种只需要一次使用的类,不能重复使用。比较常见的是在图形界面编程GUI里用的到

4.String类常用方法——API文档阅读
String是不可变字符序列
String类的常用方法
1)char charAt(int index)返回字符串中第index个字符
2)boolean equalsIgnoreCase(String other)如果字符串与other相等(忽略大小写)则返回true
3)int    indexOf(String str)      lastIndexOf()(反向搜索)     查找指定的字符串出现的位置
4)int  length() 返回字符串的长度
5)String replace(char oldChar,char newChar)返回一个新串,它是通过用newChar 替换此字符串中
出现的所有oldChar而生成的
6)boolean startsWith(String prefix)如果字符串以prefix开始,则返回true
7)boolean endsWith(String prefix)如果字符串以prefix结尾,则返回true
8)String substring(int beginIndex),
String substring(int beginIndex,int endIndex)返回一个新字符串,该串包含从原始字符串beginIndex
到串尾或endIndex-1的所有字符
9)String toLowedCase()返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母
10)String toUpperCase()返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母
11)String trim() 返回一个新字符串,该串删除了原始字符串头部和尾部的空格
常量池,用于存储在编译期确定,并被保存在已编译的字节码文件中的一些数据,包括final修饰变量及
字符串变量,和符号引用量
String做地址比较的时候,看等号右边,有变量或者有关键字new,都会在堆中开辟空间,因此地址不一样
字符串相等的判断
== 比较字符串内存地址是否相等
equals(Object obj)
用于比较两个字符串对象的内容是否相等

数组可以存基本数据类型,也可以存引用数据类型
对象数组:使用数组存储对象(自定义对象)

数组的拷贝                   地址拷贝                  值的拷贝
System.arraycopy(arrA,0,arrB,0,lenth)

冒泡排序,N个数,比较N-1轮,每轮比较N-1-i次

二分法,折半查找(前提是有序数组)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值