抽象类
abstract修饰可以用来修饰方法也可以修饰类,如果修饰方法,该方法就是抽象方法;如果修饰类,该类就是抽象类。
抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类。
抽象类,不能用new关键字来创建对象,它是用来让子类继承的。
抽象方法,只有方法的声明,没有方法的实现,它是来让子类实现的。
子类继承抽象类,就必须要实现抽象类没有实现的抽象方法,否则该类也要声明为抽象类。
例如下面例子
package com.mjh.oop.demo06;
/**
* abstract 抽象类 extends :单继承 接口可以实现多继承
* 抽象方法必须在抽象类里,但抽象类里面可以普通方法
*/
public abstract class Abstract {
//有人帮我们实现
// abstract 抽象方法 只有方法名,没有方法体
public abstract void aaa();
public void ss(){};
}
package com.mjh.oop.demo06;
/**
* 一般的类要实现抽象方法,而且要重写抽象类中的抽象方法,否则这个一般类就要变为抽象类
*子类可以不用重写抽象类里的一般方法
*/
public class Student extends Abstract {
@Override
public void aaa() {
}
public static void main(String[] args) {
// new Abstract();//不能用new关键字创建对象,它由子类实现
Student s=new Student();
s.aaa();
s.ss();
}
}
接口
-
关键字 interface
-
利用接口可以间接实现多继承 implements
-
接口中的所有定义的方法其实都是抽象的 public abstract
-
接口中定义的变量一定是常量(不常用)
比如我们定义了Person接口和Teacher接口
在一般类里要实现接口就要实现接口中的所有方法
package com.mjh.oop.demo06; public interface Person { //常量 public static final int AGE=66; /** * 接口的所有定义其实都是抽象的 public abstract */ void add(); void delete(String name); void update(String name); void query(String name); }
package com.mjh.oop.demo06; public interface Teacher { void teach(); }
package com.mjh.oop.demo06;
/**
* 抽象类
* 类 可以实现接口,implements接口
* 实现了接口的类,就需要重写接口中的方法
* 利用接口来间接实现多继承
*/
public class PersonImpl implements Person,Teacher{
@Override
public void add() {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void teach() {
}
}