织梦网站头部到底部去了,福建建设资格管理中心网站,单仁网站建设,建设一个视频网站需要多少钱目录
一、抽象类
1.什么是抽象类
2.抽象类的注意事项
3.抽象类与普通类的对比
二、接口
1.接口的简单使用
2.接口的特性
3.接口的使用案例
4.接口和抽象类的异同 一、抽象类 所谓抽象类#xff0c;就是更加抽象的类#xff0c;也就是说#xff0c;这个类不能具体描…
目录
一、抽象类
1.什么是抽象类
2.抽象类的注意事项
3.抽象类与普通类的对比
二、接口
1.接口的简单使用
2.接口的特性
3.接口的使用案例
4.接口和抽象类的异同 一、抽象类 所谓抽象类就是更加抽象的类也就是说这个类不能具体描述某一个对象。 1.什么是抽象类
1.1.引入
下面这是一个子类继承父类并且重写父类中的eat方法。
class Animal {public String name;public Animal(String name) {this.name name;}public void eat() {System.out.println(正在吃……);}
}
class dog extends Animal {public dog(String name) {super(name);}Overridepublic void eat() {System.out.println(this.name正在吃奥里给);}
}
public class Test {public static void main(String[] args) {Animal animal new dog(旺财);animal.eat();}
}
运行结果 我们可以发现父类的eat方法似乎没有什么作用也不能具体表现某一个具体动物。那我们可不可以不实现父类的eat方法呢答案当然是可以的。
1.2.抽象方法与类引入
我们在上面的代码进行改进 上述操作完成一个抽象类和抽象方法的撰写。
1.3.抽象类的语法 一个方法没有实现就需要用abstract修饰如果一个类包含了抽象方法那么这个类也必须用abstract修饰。 1抽象方法
在修饰符后面方法返回值前面加上abstract关键字也可以不加修饰符 2抽象类
在class后面加上abstract关键字 2.抽象类的注意事项 抽象类和普通的类没有什么区别。但是可以比普通类多了抽象方法(可以不实现)也比普通类多了abstract关键字。 abstract class Animal {public String name;public Animal(String name) {this.name name;}public abstract void eat();
}
class dog extends Animal {public dog(String name) {super(name);}Overridepublic void eat() {System.out.println(this.name正在吃奥里给);}
}
public class Test {public static void main(String[] args) {}
} 继续使用上面的代码进行验证。
2.1.抽象类不能实例化
1实例化就会报错 2原因
因为抽象类不能具体表现一个对象也就无法实例化
3用法
所以抽象类的出现一般都要配合子类一起出现借助子类来实例化对象。说明抽象类一般都是发生在继承的继承上同样可以发生向上转转型。
2.2.子类继承抽象类的注意点
1一个普通类继承了这个抽象类那么这个普通类就必须重写抽象类中的抽象方法。
2当抽象类中有构造方法子类也需要调用构造方法来帮助父类进行初始化。
2.3.关于抽象类的语法
1抽象方法必须被重写因此不能被private或final或static修饰
2抽象类中可以有普通的成员变量和成员方法。
3A、B都是抽象类B继承了A。此时有一个普通类C继承了BC类要重写A、B中的所有抽象方法。C-B-A
2.4.抽象类的作用
1抽象类的出现相当于给编译器加上了一层校验。
2原因当子类继承父类时编译器都会提醒编译器需要重新抽象方法(为后面的多态打下基础)
3.抽象类与普通类的对比
类/异同普通类抽象类构造方法有有普通成员变量有有普通成员方法有有抽象方法无有实例化允许不允许 二、接口 接口就是抽象类的进一步抽象。接口也是一组公共的规范如果需要使用接口就需要蹲守接口的一系列规范 1.接口的简单使用
1.1.生活接口举例
如电脑的USB口只要符合该接口的规范就可以插入又如电源插座插孔符号其规范就可以插入像电脑、电视机、电饭煲等等符合规范的设备
1.2.接口的语法
1和定义类进行类比定义接口只需要把class关键字替换成 interface 即可
2定义接口位置 这种定义方式只需要输入接口名字就可以生成接口如果不选择也可以但是要自己定义interface接口名字的形式去定义。 以上就定义好了两个接口接口中的成员方法和成员变量下面接着讲解。 1.3.接口的成员变量与方法
1成员变量 以上原因是什么呢我们使用idea的功能AltIns可以生成解决方案 原来是要先赋值那原因是什么呢变量初始化时必须赋值的指明该变量被final修饰不能被修改。
接口中的成员变量特点 默认被public static final修饰 去掉后 所以成员变量初始化必须要赋值。定义格式类型变量名 值
2成员方法 显示报错提示说抽象方法不能被实现 这样就不会再报错并且没有具体实现的方法不应该加上abstract修饰吗看上面pubblic字体暗了说明接口的方法默认都是public abstract修饰的 那接口的成员方法一定不能被实现吗那倒未必。
1被static修饰的方法可以被实现 2被default修饰的成员方法可以实现 default一般是默认的修饰符也就是不写的时候但是这里是必须要显示的写出default
1.4.接口的实现
1接口不能实例化 接口和抽象类都是不能直接实例化的所以需要借助子类来完成实例化
2子类继承接口
继承接口要使用implements关键字而不是extends 上面显示报错因为继承父类的抽象方法需要子类重写 子类实例化 但是一般都不会这样使用接口 以上粗略介绍了接口的一些定义、定义内容、和实现的写法下面先介绍接口的特性也就是接口的特点。 2.接口的特性
2.1.关于接口的定义
1接口定义的时候要使用 interface 关键字来定义
2接口中的成员变量默认都是 public static final 修饰的所以定义成员变量的格式为类型变量名字 初始值;
3接口中的成员方法没有实现时都默认是抽象方法也就是成员方法默认是 public abstract 修饰的所以定义成员方法的格式返回值类型 方法名字();
4成员方法如果要实现必须被static 或者 default 修饰
5接口名字命名推荐首字母用大写I后面跟上接口名字接口名字首字母也大写
2.2.接口的继承和实现
1接口是不能被实例化的
2当一个类实现接口的时候需要使用implements关键字并且实现之后要重写接口中的抽象方法
3一个类可以实现多个接口解决了Java中不能多继承的缺点
4继承和实现的顺序继承类要在实现接口的前面。一个类可以继承一个普通类/抽象类 同时还可以实现多个接口
5接口当中不能有静态代码块和构造方法
6重写接口当中的抽方法时只能使用默认的访问权限
7接口的生成的字节码文件后缀也是.class 3.接口的使用案例
1三个接口 2一个抽象类 3子类1继承实现 子类2 4main方法实现 运行结果 5代码
public abstract class Animal {public String name;public Animal(String name) {this.name name;}public void eat() {System.out.println(this.name正在吃);}
}
class Dog extends Animal implements IRun,ISwim {public Dog(String name) {super(name);}Overridepublic void eat() {System.out.println(this.name正在吃狗粮);}Overridepublic void run() {System.out.println(this.name正在用四条腿跑……);}Overridepublic void swim() {System.out.println(this.name正在用四条腿游泳……);}
}
class Duck extends Animal implements IRun,ISwim,IFly {public Duck(String name) {super(name);}Overridepublic void eat() {System.out.println(this.name正在吃鸭粮);}Overridepublic void run() {System.out.println(this.name正在用两个脚跑……);}Overridepublic void swim() {System.out.println(this.name正在用两条腿游泳……);}Overridepublic void fly() {System.out.println(this.name正在用两个翅膀飞……);}
}
public interface IRun {void run();
}public interface IFly {void fly();
}public interface ISwim {void swim();
}public class Test {public static void eat(Animal animal) {animal.eat();}public static void fly(IFly fly) {fly.fly();}public static void main(String[] args) {Dog dog new Dog(旺财);Duck duck new Duck(唐老鸭);eat(dog);eat(duck);fly(duck);}
}4.接口和抽象类的异同
4.1.相同点
1都有抽象方法
2都不能实例化对象
4.2.不同点
1抽象类中可以包含普通方法和普通字段这些普通方法和普通字段在子类中可以直接使用不必重写但是接口中不能包含普通方法子类必须重写所有的抽象方法
2一个普通类只能继承一个抽象类但是可以实现多个接口 以上就是抽象类和接口的全部内容了。