网站开发脚本语言和数据库,天津品牌建站,深圳网站制作费用多少,新闻html网页设计代码范文抽象类#xff1a;
什么是抽象类#xff1a; 听着就很抽象#xff0c;确实挺抽象#xff0c;先来写一个抽象类感觉一下#xff1a; 这就是抽象类#xff01; 在 Java 中#xff0c;一个类如果被 abstract 修饰称为抽象类#xff0c;抽象类中被 abstract 修饰的方法…抽象类
什么是抽象类 听着就很抽象确实挺抽象先来写一个抽象类感觉一下 这就是抽象类 在 Java 中一个类如果被 abstract 修饰称为抽象类抽象类中被 abstract 修饰的方法称为抽象方法抽象方法不用给出具体的实现体。 抽象类特点
1. 抽象类不能直接实例化对象 如果实例化抽象类就会报错 2. 抽象方法不能是 private 的 抽象方法和抽象类都不能被private修饰。因为要在其他类中进行重写 3. 抽象方法不能被final和static修饰因为抽象方法要被子类重写
这种情况都会报错
4. 抽象类必须被继承并且继承后子类要重写父类中的抽象方法否则子类也是抽象类必须要使用 abstract 修饰 1、子类必须重写父类的抽象方法 2、子类也可以是抽象类 如果此时有子类继承了Dog类那就需要既要重写Animals中抽象方法和又要重写Dog中的抽象方法 其他特点 5. 抽象类中不一定包含抽象方法但是有抽象方法的类一定是抽象类 6. 抽象类中可以有构造方法供子类创建对象时初始化父类的成员变量 例如
abstract class Animals {int age;String name;String color;public Animals(){System.out.println(Init class Animals);}public void run(){System.out.println(Aniamla run);}abstract public void barks();abstract public void eat();
} 抽象类的作用 抽象类本身不能被实例化 , 要想使用 , 只能创建该抽象类的子类 . 然后让子类重写抽象类中的抽象方法 . 使用抽象类的场景就如上面的代码 , 实际工作不应该由父类完成 , 而应由子类完成 . 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的 . 但是父类是抽象类就会在实例化的时候提示错误 , 让我们尽早发现问题 接口
语法规则 接口的定义格式与定义类的格式基本相同将class关键字换成 interface 关键字就定义了一个接口。 例如 public interface 接口名称 { // 抽象方法 public abstract void method1 (); // public abstract 是固定搭配可以不写 public void method2 (); abstract void method3 (); void method4 (); // 注意在接口中上述写法都是抽象方法跟推荐方式 4 代码更简洁 } 注意 接口中的方法都是抽象方法 public abstract 返回值类型 方法名(); 可以简写为 返回值类型 方法名(); 提示 : 1. 创建接口时 , 接口的命名一般以大写字母 I 开头 . 2. 接口的命名一般使用 形容词 词性的单词 . 3. 阿里编码规范中约定 , 接口中的方法和属性不要加任何修饰符号 , 保持代码的简洁性 接口不能直接使用必须要有一个实现类来实现该接口实现接口中的所有抽象方法。 接口特性 1. 接口类型是一种引用类型但是不能直接 new 接口的对象 和抽象类是一样的。 public class TestUSB { public static void main ( String [] args ) { USB usb new USB (); } } 2、接口中每一个方法都是 public 的抽象方法 , 即接口中的方法会被隐式的指定为 public abstract 只能是public abstract其他修饰符都会报错 )。和抽象类是一样的 public interface USB { // Error:(4, 18) java: 此处不允许使用修饰符 private private void openDevice (); void closeDevice (); } 3. 接口中的方法是不能在接口中实现的只能由实现接口的类来实现。
和抽象类是一样的 public interface USB { void openDevice (); // 编译失败因为接口中的方式默认为抽象方法 // Error:(5, 23) java: 接口抽象方法不能带有主体 void closeDevice (){ System . out . println ( 关闭 USB 设备 ); } } 4. 重写接口中方法时不能使用默认的访问权限。 public class Mouse implements USB { Override void openDevice () { System . out . println ( 打开鼠标 ); } // ... } // 编译报错重写 USB 中 openDevice 方法时不能使用默认修饰符 // 正在尝试分配更低的访问权限 ; 以前为 public 5. 接口中可以含有变量但是接口中的变量会被隐式的指定为 public static final 变量
和抽象类有区别 public interface USB { double brand 3.0 ; // 默认被 final public static 修饰 void openDevice (); void closeDevice (); } public class TestUSB { public static void main ( String [] args ) { System . out . println ( USB . brand ); // 可以直接通过接口名访问说明是静态的 // 编译报错 Error:(12, 12) java: 无法为最终变量 brand 分配值 USB . brand 2.0 ; // 说明 brand 具有 final 属性 } } 6. 接口中不能有静态代码块和构造方法。 public interface USB { // 编译失败 public USB (){ } {} // 编译失败 void openDevice (); void closeDevice (); } 7. 接口虽然不是类但是接口编译完成后字节码文件的后缀格式也是 .class 8. 如果类没有实现接口中的所有的抽象方法则类必须设置为抽象类 9. jdk8 中接口中还可以包含 default 方法。 实现多个接口 之前讲过一个类只能继承一个父类但是一个类可以扩展多个接口也就是可以implements多个接口 在 Java 中类和类之间是单继承的一个类只能有一个父类即 Java 中不支持多继承 但是 一个类可以实现多个接 口 。 我们可以实现一个动物类然后提供多个接口这些接口可以表示动物的特征 一共定义3个接口一个父类两个子类
接口 父类 子类 注意定义时必须重写接口中的方法 注意扩展接口和继承父类的顺序先继承后扩展 利用多态输出 再多定义一个类可以进行多态的类(可以进行向上转型和向下转型) 这个类是重点希望大家看懂 public class Walk {public static void walk(IRun running){System.out.println(我去散步带着);if(running instanceof Cat) {Cat cat (Cat) running;cat.name mimi;cat.age 2;} else if(running instanceof Bird){Bird bird (Bird) running;bird.name qiumi;bird.age 1;}running.run();}
}接口之间的继承
类与类之间可以进行继承(用关键字extends)类与接口之间可以进行扩展(用关键字inplements)那么接口之间能不能进行继承呢
答案肯定是能滴
也是用关键字extends
此时比如两个接口一个是IFly和IRun两个接口可以合并成一个接口既可以跑也可以飞 此时比如说鸟类可以直接调用一个接口就可以了
public class Bird extends Animals implements IFlyrun{Overridepublic void fly() {System.out.println(this.name用两只翅膀飞);}Overridepublic void run() {System.out.println(this.name用两只脚跑);}
}
但是此时还是需要重写所有的接口中的抽象类
抽象类和接口的区别 1、抽象类还是类里面还是可以定义成员变量和成员方法而且这些变量和方法的访问限制可以自己更改。接口里面的成员方法只能定义抽象方法不能实现成员变量也只能是常量也就是被final修饰 2、抽象类中的普通变量和方法可以被子类调用不需要重写但是接口中只能定义抽象类而且必须要被扩展它的子类重写 3、类与类之间只能有一个父类但是多个接口可以被一个类拓展 (自己总结的不知道到不到位如有不对请多多指正。)