前言:
当我们在创建一个动物类的同时在这个类中创建动物对象,但是当你提到动物类,你并不知道我说的是什么动物,只有看到了具体的动物对象,你才知道这是什么动物,所以说动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物,同理我们也可以推理不同的动物,他们的行为习惯应该是不一样的,所以我们不应该在动物类中给出具体体现,而是给出一个声明即可。因此,这样的一个动物类才是抽象类,而狗,猫才是实体对象类。
抽象类
限制这个类不能被实例化,只能被继承
语法:
public abstract class 类名(){}
抽象类包含哪些东西:
1.属性
2.普通方法
3.构造方法
4.抽象方法(可以有可无)
父类定义某个方法,但是这个方法实现不重要,但这个方法一定需要子类去重写,强制性的,子类不重写就会报错
抽象类不一定包含抽象方法,抽象方法一定要写在抽象类中
抽象方法就可以实现上面的问题,抽象方法等着子类去重写
语法:
public abstract 返回值类型 方法名([参数列表]);
// Animal类
public abstract class Animal {
String name;//属性
public void sleep() { //普通方法
System.out.println("我趴着睡");
}
public Animal(){//构造方法
System.out.println("这是无参构造器。。。。");
}
public abstract void eat(); //抽象方法
}
实现狗类继承动物类:
/**
* 狗类
*/
public class Dog extends Animal {
@Override
public void eat() {
super.sleep();
System.out.println("狗吃骨头~~~");
}
}
调用:
/**
* 调用
*/
public class Test {
public static void main(String[] args) {
Dog dog=new Dog();//new一个对象出来
dog.eat();
}
}
结果:
这是无参构造器。。。。
我趴着睡
狗吃骨头~~~
注意:
如果父类定义抽象方法,
子类有两种解决方案:
1)子类变为抽象方法;
2)子类重写父类的全部抽象方法
细节:
1)抽象方法不能用private修饰
2)抽象方法不能使用static修饰
3)抽象方法不可以使用final修饰
接口
接口其实是一个更抽象的抽象类,只包含 常量,抽象方法
关键字:interface
定义语法:
public interface 接口名{
//常量
public static final double PI=3.1415926;
//抽象方法
public abstract 返回值类型 方法名([参数列表]);
//。。。
}
借口不能实例化,等待其他类去实现class A implements B,C,D{},接口相当于父类
public interface UseInterface {
//属性 报错
//String name;
//常量 ,可以省略 public static final
//只能写 public static final
double PI = 3.14;
//构造方法 报错
//public UseInterface(){};
/*//非抽象方法 ,不能包含
public void fun1(){
}*/
//抽象方法 ,可以省略 public abstract
//只能写 public abstract
void service();
/*//jdk1.8 特有
default void fun1(){
}*/
}
public class UDisk implements UseInterface,Save{//接两个接口
//实现接口的抽象方法
@Override
public void service() {
System.out.println("正在传输数据。。。");
}
@Override
public void save() {
System.out.println("正在保存数据。。。");
}
}
经验:
我们可以定义一个没有任何抽象方法的接口,作为一种标签,类实现接口表示该类贴了这个标签
注意:
类 extends 类
类 implements 接口1,接口2.。。。
接口 extends 接口1,接口2.。。。
类 extends 类 implements 接口1,接口2.。。。
————————————————
原文链接:https://blog.csdn.net/m0_69855013/article/details/126332379
网友评论