//在类中有一个及以上的抽象方法 则类必须上抽象类
//如果类是抽象方法 但不一定会有抽象方法
//抽象类与抽象方法的关键字abstract
//抽象类可以有多个子类,但是一个子类只能有一个父类 /抽象类
public abstract class XieRengFu {
private String name;
public XieRengFu(){
System.out.println("我是抽象类中默认的构造方");
}
public XieRengFu(String name){
this.name = name;
System.out.println("我是抽象类中有参数的构造方法");
}
//抽象方法他是没有方法体的
public abstract void shout();
public void Read(){
System.out.println("我是抽象类中的read方法");
}
}
class Dog extends XieRengFu{
public Dog(String name){
//调用父类中的构造方法,必须写在子类构造方法中,还必须上构造方法代码的第一行
super(name);
}
@Override
public void shout() {
System.out.println("狗的叫声:汪汪汪!");
}
}
class Cat extends XieRengFu{
@Override
public void Read() {
super.Read();
}
@Override
public void shout() {
System.out.println("猫的叫声:喵喵喵!");
}
}
class Demo1{
public static void main(String[] args) {
Dog dog = new Dog("XXX");
dog.shout();
Cat cat = new Cat();
cat.shout();
cat.Read();
//抽象类只能被继承不能被实例化
}
}
//使用interface标识的就是接口
public interface XieRengFuApi {
//接口中的属性默认都是公开静态常量
String NAME = "zhangsan";
//接口中的没有方法体的方法默认都是公开的权限
//并且都是抽象方法
public abstract void eat();
//接口不能有非抽象的方法体
//接口中可以包含
// 静态方法
public static void show(){
}
}
abstract class PersonInfo{
}
//通过implement来继承接口 一个类可以继承多个接口 使用英文逗号分隔酱可以
//继承接口后则必需实现接口的抽象方法
//如果一个类要继承某一个父类,又继承接口,如继承的父类必需写在接口前面
class Student extends PersonInfo implements Test{
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void show() {
}
}
class Tearcher implements XieRengFuApi{
@Override
public void eat() {
}
}
//在接口中继承接口后使用extends来继承
interface Test extends XieRengFuApi{
void show();
}
class Demo{
public static void main(String[] args) {
System.out.println(XieRengFuApi.NAME);
XieRengFuApi.show();
Student student = new Student();
}
}