1、比较两个字符串的值是否相等,不能使用==,使用equals(),例如:
a.equals(b);
2、继承抽象类的具体类必须实现所有抽象方法。
3、抽象类的规则:
(1)抽象类可以没有抽象方法,有抽象方法的类必须是抽象类。
(2)非抽象类继承抽象类必须实现所有抽象方法。
(3)抽象类可以继承抽象类,可以不实现父类的抽象方法。
(4)抽象类可以有方法实现和属性。
(5)抽象类不能被实例化。
(6)抽象类不能声明为final。
(7)抽象类可以有构造方法。
4、接口的定义格式:
interface接口名称{
全局常量;
抽象方法;//只能定义全局常量和抽象方法,JDK1.8后可以定义默认的实现方法
}
//在JDK1.8后新特性,可以被所有实现类继承
interface Demo1{
public default void print() {
System.out.println("eat");
}
}
接口体中包含常量的声明(没有变量)和抽象方法两部分。接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符)、所有的抽象方法的访问权限一定都是public(允许省略public、abstract修饰符)。
5、接口使用规则:
(1)接口之间可以多继承。(类只能单继承)
(2)具体类实现接口必须实现接口的所有方法。
(3)抽象类实现接口可以不实现接口的方法。
(4)接口不能有构造方法。
(5)接口不能被实例化。
6、多态性
对象的多态性:
对象多态性是从继承关系中的多个类而来,
向上转型:将子类实例转化为父类引用
格式:父类 父类对象 = 子类实例;(自动转换)
以基本数据类型操作为例:int i = 'a';
(因为char的容量比int小,所以可以自动完成)
向下转型:将父类实例转化为子类实例
格式:子类 子类对象 = (子类)父类实例;(强制转换)
以基本数据类型操作为例:char c = (char)97;
因为int是4个字节,char是2个字节,前者大,所以需要强制转换。
class Demo2{
public static void main(String[] args) {
//用父类的引用指向子类对象(用大的类型来表示小的类型),向上转型(自动转换)
Chicken hc = new HomeChicken("小鸡");
Chicken yc = new YeChicken("大鸡");
eat(hc);
eat(yc);
Chicken jjc = new JianJiaoChicken("尖叫鸡");
eat(jjc);
}
//抽象(粒度)面向抽象编程(面向接口编程)
public static void eat(Chicken c) {//在实际开发中尽量使用父类,因为它的可变性(适应性)更强,任何子类传进来它都能接受,更利于扩展
System.out.println("鸡吃饭");
c.eat();
//c.song();这样编译会出错,要下面那样才行
JianJiaoChicken jjc = (JianJiaoChicken)c;//大的类型转换为小的类型,强制转换(向下转换)
jjc.song();
}
}
//鸡
abstract class Chicken{
private String name;
public Chicken() {}
public Chicken(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void eat();
}
//家鸡
class HomeChicken extends Chicken{
public HomeChicken(String name) {
super(name);
}
public void eat() {
System.out.println(this.getName()+",我爱吃米");
}
}
//野鸡
class YeChicken extends Chicken{
public YeChicken(String name) {
super(name);
}
public void eat() {
System.out.println(this.getName()+",我爱吃虫子");
}
}
class JianJiaoChicken extends Chicken{
public JianJiaoChicken(String name) {
super(name);
}
public void eat() {
System.out.println(this.getName()+",我不吃东西");
}
public void song() {
System.out.println("唧唧复唧唧,我是尖叫鸡");
}
}