赞
踩
public abstract class Animal{
public abstract void bark();
}
class TestOne {
public static void main(String[] args) {
// 这里会报错,无法实例化类型Demo1
Demo1 demo1 = new Demo1(34);//报错
}
}
abstract class Demo1 {
private int age;
public Demo1(int age) {
this.age = age;
}
}
4 如果一个类继承于一个抽象类,那么子类必须实现父类的抽象方法。否则,子类继承的方法还是抽象方法,子类也变成了抽象类,要用abstract修饰。
在其他方面,抽象类和普通类并无区别。
public abstract class Animal { //抽象类中可以有非抽象方法,也可以有成员变量 private int a = 10; public abstract void bark(); //如果没有此抽象方法,但是class前有absract修饰,也是抽象类,也不能实例化 public void say() { //普通成员方法 System.out.println("我是抽象类中的非抽象方法,此抽象类中的私有成员变量a= " + a); } public int getA() { return a; } public void setA(int a) { this.a = a; } } public class Dog extends Animal{ public void bark() { //子类实现Animal的抽象方法 System.out.println("汪汪~汪汪~"); System.out.println("我是子类,不能直接调用父类的私有变量a :("); System.out.println("我是子类,只有通过super.getA()调用父类的私有变量a:" + super.getA()); } } public class Test { public static void main(String[] args) { Dog dog = new Dog(); dog.say(); //子类继承调用Animal的普通成员方法 dog.bark(); //子类调用已经实现过的方法 } }
注:
抽象类方法
JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是public和protected)
JDK 1.8时,抽象类的方法默认访问权限变为default(可以是public和protected或者不写)
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,但基本没什么意义,在我的开发经验里还没有在实际项目中在接口声明变量的应用。
[public] interface InterfaceName {
public void method(); //抽象方法,默认就是abstract,所以直接这样写就好了
}
class ClassName implements Interface1,Interface2,[....]{
}
可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的
所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
public class Test { public static void main(String[] args) { Computer c = new Computer(); c.plugin(new Phone()); c.plugin(new Print()); } } interface Usb{//定义接口 public void install(); public void work(); } class Phone implements Usb{//实现usb接口 public void install() { System.out.println("安装手机驱动程序。"); } public void work() { System.out.println("从电脑拷贝数据到手机上。"); } } class Print implements Usb{//实现usb接口 public void install() { System.out.println("安装打印机驱动程序。"); } public void work() { System.out.println("打印一份文件。"); } } class Computer{//在电脑上应用Usb接口 public void plugin(Usb usb) {//接收usb接口实例 usb.install();//调用接口方法 usb.work();//调用接口方法 } }
以下内容转自:https://blog.csdn.net/chengqiuming/article/details/70139323
1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
2 接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。
3 接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
4 接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
5 一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。