abstract class
抽象类:
如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。
比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。
抽象使用的关键词:abstract
1、abstract 修饰类 抽象类
2、abstract 修饰方法 抽象方法
3、抽象方法没有实现部分
注意:抽象类中的抽象方法 强制子类去重写抽象方法
注意:抽象类不能创建对象(不能实例化对象)
创建对象的方式:比照多态来创建
抽象类注意
1、成员变量:可以有变量 也可以由常量
2、成员方法:可以有抽象方法 也可以有成员方法
3、构造方法:有
注意:抽象类中不一定有抽象方法 但是抽象方法 一定存在抽象类中
注意:抽象类的子类 必须重写抽象父类的所有抽象方法
public class Demo01 {
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
animal.fun();
}
}
abstract class Animal{
final int num = 10;
public abstract void eat();
public Animal() {
System.out.println("我是父类的抽象方法");
}
public void fun() {
System.out.println("我是成员方法");
}
}
class Cat extends Animal{
public Cat() {
super();
}
@Override
public void eat() {
System.out.println(num);
System.out.println("猫吃鱼");
}
}
abstract 与那些关键字不能共存
abstrcat 和 static
static修饰方法用类名去调用,abstract修饰抽象方法没有方法的实现
没有实现部分的方法 只能是方法的声明 不能直接调用 所以不能共存
abstrcat 和 final
final修饰方法不能被重写 abstrcat修饰方法就是为了子类重写方法所以不能共存
abstrcat 和 peivate
private修饰方法只能本类访问 子类访问不到 谈不上重写的方法了 所以不能共存
package com.lanou3g;
接口:
1、狭义的接口 interface关键词修饰的 叫做接口
2、广义的接口: 规则
定义接口:
interface 接口名{}
接口特点
1、接口中只能声明抽象方法
2、如果你不写public abstract关键词修饰 接口中声明方法
那么系统会帮你 默认添加上
书写建议:最好写上默认的修饰词
3、接口也不能实例化对象 (谁要用接口 谁就去实现接口中的方法)
(接口相当于干爹 继承 相当于 亲爹)
可以使用多态的方式创建实现类的对象
4、接口的实现 使用implement(实现) 关键字
接口注意:
1、成员变量:只能有常量(static public final 常量名 = 初值)
当你在接口中声明变量时系统默认 会是 public static final修饰
书写建议:最好写熟了再说
2、成员方法:只有抽象方法 没有成员方法
3、构造方法:没有构造方法
public class Demo03 {
public static void main(String[] args) {
InterA a = new Person();
a.print();
System.out.println(InterA.num);
}
}
interface InterA{
public static final int num = 10;
public abstract void print() ;
}
class Person implements InterA{
@Override
public void print() {
System.out.println(num);
System.out.println("打印");
}
}
interface InterX{
public abstract void fun();
}
interface InterY{
public abstract void fun();
}
interface InterZ extends InterX,InterY{
}