目录
抽象类:abstract
在JAVA里,用abstract class来定义抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
//抽象方法是在定义一种规则,由子类去遵守,子类一定要去重写抽象方法
* 1.抽象类特点:
1、抽象类和抽象方法都需要用abstract修饰;
2、抽象类中可以没有抽象方法,但抽象方法一定在抽象类中;
3、抽象类不能直接创造对象;
4、抽象类有构造方法。
* 2.abstract能修饰哪些结构 :类和方法
抽象方法必须在抽象类里,当我们定义了一个抽象类,这个抽象类中可以有哪些结构?
属性,成员方法,构造器,抽象方法,常量
抽象类中能不能没有抽象方法? 可以,抽象类里可以没有抽象方法,但是希望你没有抽象方法时,别用抽象类
抽象类是不能被实例化的,
抽象类不能创建对象
抽象类的构造器存在的意义: 为了约定子类的构造器必须和父类要匹配
一个类如果继承了一个抽象类,就必须重写这个抽象类所有的抽象方法
* 3.抽象方法的特点
(1)抽象方法是一个不完整的方法,没有方法体。
(2) 抽象方法一定是抽象类,抽象的类里不一定有抽象方法 (接口中的方法一定是抽象方法!)
(3)抽象方法和类都要由abstract 修饰
(4)抽象类不能通过new 来实例化,抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
* 4.接口 JDK7-JDK8有什么变化
* JDK7之前:接口只能定义抽象方法,不能有属性,不能有方法 * JDK8之后:接口只能定义抽象方法,不能有属性,可以有默认方式和静态 * JDK7-8:默认方法,静态方法
* 5.面试题:
1)继承类和实现接口的异同?
实现是接口有的,都得覆盖,继承是父类有的,可以拿来用,也可覆盖某些方法。
2) 抽象类和接口的区别:
默认的方法实现 抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。
抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。
但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。所以就不能像抽象类那么无赖了,接口就根本不能存在方法的实现。
* 6.匿名实现类
没有类名的内部类,必须在创建时使用 new 语句来声明类。. 其语法形式如下:. new <类或接口> () { // 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。. 使用匿名类可使代码更加简洁、紧凑,模块化程度更高。. 匿名类有两种实现方式:. 继承一个类,重写其方法。
* 栈和队列
* 建立在两个最基础的数据结构的基础上构建的两个受限制的线性表* 栈先到后得、后到先得,队列先到先得、后到后得
* 重点:结合多态,参数的传递,配合instanceof使用 * * 能够使用多态表示对象的时候,尽量使用多态 *
接口
课上
* 接口 * 比抽象类更高级的抽象。 * 声明:使用interface关键字,public interface Ch02 * JDK7之前:接口只能定义抽象方法,不能有属性,不能有方法 * JDK8之后:接口只能定义抽象方法,不能有属性,可以有默认方式和静态 * JDK7-8:默认方法,静态方法 * * 接口中结构的特点: * 接口中的抽象方法默认是public abstract,我们推荐就省略了 * 接口中的常量默认是public static final,我们推荐就省略了 * * *接口中的结构必须是public * * 接口可以被实现,实现类 * 比如说A类 implements 接口,那我们就说A是这个接口的实现类 * * 如果一个类实现一个接口,它就需要重写接口中所有的抽象方法 * * 实现接口是可以多实现的,继承只能单继承 * 开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决 * * 面试题: * 1.继承抽象类和实现接口的异同? * 抽象类可以单继承接口可以多实现 * 2.抽象类和接口的区别? * * 接口存在的意义? * 约定 * * 多态的前提条件? * 1.继承,实现 * 2.重写方法 * 3.父类--子类,接口--实现类 * * 面试题: * 在Java中只有单继承? * 在Java中存在多继承的,发生在接口之间 * Java类与类之间只有单继承 * * 面向对象编程 * 面向接口编程 * 面向切面编程 * * 抽象类也是比类更高级的抽象 * * 栈先到后得、后到先得,队列先到先得、后到后得
课下
Demo
// 接口定义:是一个极端的抽象类,接口中只有抽象方法和全局常量(静态的常量)。 //抽象类Person的eat方法是一个抽象方法,定义的是一种规则 //如果类中全都是规则,没有属性、普通方法。。。 //那么这个类直接用接口来描述 //接口格式:class改用interface 接口没有方法体 //接口中内容:1)抽象方法 方法前默认使用public abstract // 2)全局静态常量 属性前默认使用public static final修饰
//Demo类
package com.soft.zs;
public class Demo {
public static void main(String[] args) {
System.out.println(Person.male);
}
}
interface A{}
//Person类
package com.soft.zs;
//就是一个规则
public interface Person {
//接口中的属性
String male="男";
String female="女";
void eat();
void sleep();
void walk();
}
//Teacher类
package com.soft.zs;
public class Teacher implements Person{
@Override
public void eat() {
}
@Override
public void sleep() {
}
@Override
public void walk() {
}
}
输出结果
![]()
Demo1
//接口的使用:implements一个类去实现一个接口 //如果一个类没有重写接口的所有抽象方法,该类必须是抽象
//Demo类
package com.soft.zs;
public class Demo1 {
}
//Animal类
package com.soft.zs;
public interface Animal {
String show();
}
//Cat类
package com.soft.zs;
//implements实现
public class Cat implements Animal{//实现某一种功能、规则
@Override
public String show() {
return null;
}
}
Demo2
//**1.使用接口的意义: // 继承是有局限的,但是类可以实现多个接口, // java的继承是单继承,一个类只能继承另一个类 // 如果使用接口,一个类可实现多个接口 // 2.接口可以很灵活: // 接口可以继承接口,接口可以多继承,一个接口可以继承多个接口 // 3.一个类可以继承一个父类,同时实现多个接口: // 格式 class D extends A implements B,C
//Demo2
package com.soft.zs;
public class Demo2 {
}
//A类
package com.soft.zs;
public interface AInterface {
void m1();
}
//B类
package com.soft.zs;
public interface BInterface {
void m2();
}
//C类
package com.soft.zs;
public interface CInterface extends AInterface,BInterface{
}
//MyInterfaceClassImpl
package com.soft.zs;
public class MyInterfaceClassImpl implements CInterface {
@Override
public void m1() {
}
@Override
public void m2() {
}
}
总结
今天学习了抽象类和接口,下午还讲了队列。
由于昨晚的预习准备,早上的课程还算能够理解,但是下午的队列由于昨晚的单链表还不是很熟悉所有没弄明白。
今日学习状况上午良好,下午糟糕,有可能是中午没休息好,老师所讲的抽象类是前面多态进化而成,还好听得懂也能理解,今晚继续沉淀沉淀,争取把今日所学吃下,有余力继续预习明天的课程。