1.Java类
类能继承类和接口,但是类(extends)单一继承,接口(implements)多继承;
注意:只有类可以实例化(抽象类不可以实例化,接口就是特殊的抽象类),所以接口没有构造方法
class A {
public A(){ //构造方法(无参)
}
public void name() {//成员方法
System.out.println("A");
}
static void names() {//静态方法
System.out.print("A");
}
}
interface B {
default void name() {//成员方法
System.out.print("B");
}
static void names() {//静态方法
System.out.print("B");
}
}
interface C {
default void name() {//成员方法
System.out.print("C");
}
static void names() {//静态方法
System.out.print("C");
}
}
class D extends A { //继承类
}
class D implements B, C { //继承接口
}
public class test7 {
public static void main(String[] args) {
A a1=new A();
A a=new D(); //向上转换
((D)a).name();//安全的向下转换
((D)a1).name();//不安全的向下转换(运行报错)
}
}
2.Java接口
**接口只能继承接口,(extends)多继承,但不可以实例化
关键字default void 方法名 (类似类的成员方法)
**
interface B {
default void name() {//成员方法
System.out.print("B");
}
static void names() {//静态方法
System.out.print("B");
}
}
interface C {
default void name() {//成员方法
System.out.print("C");
}
static void names() {//静态方法
System.out.print("C");
}
}
interface E extends B,C{
default void name() {
// 继承了B的name方法,如果不明确 B类和C类会起冲突
B.super.name();
}
}
class F implements E{//为了可以实例化
public void name(){
E.super.name();
}
}
public class test7 {
public static void main(String[] args) {
F f=new F();
f.name();
}
}
3.Java抽象类
**抽象方法一定在抽象类中,但抽象类中不一定有抽象方法。
关键字 abstract 类名 = 抽象类
public 关键字(abstract) void(数据类型) 方法名 = 抽象方法。(注意:它只能被继承,子类必须继承重写)
。
能继承类和接口,但是类(extends)单一继承,接口(implements)多继承。
**
abstract class H extends A{ //继承类
}
abstract class H implements B,C { //继承接口
}
abstract class I{
public I(){ //构造方法
}
public abstract void name(); //抽象方法的为一格式
}
class G extends I{
public void name(){
System.out.print("抽象方法的子类");
}
}
public class test7 {
public static void main(String[] args) {
G g=new G();
g.name();
}
}
4.Java继承:重写与重载
重写:不改变参数类型,参数位置,参数个数。只改变方法的内容
重载:参数类型,参数位置,参数个数,方法的内容都可以发生改变
public void (int a ,double b){
}
//1
public void (double a ,double b){
}
//2
public void (double b, int a){
}
//3
public void (int a, double b, int c){
}