抽象
用abstract 修饰的类:
抽象方法格式:
abstract 修饰符 返回值类型 方法名(参数列表);
抽象类的定义格式:
abstract class 类名{}
注意事项:
1. 抽象类中可以没有抽象方法,有抽向方法的类一定是抽象类
2. 抽象类不能创建对象,需要使用子类向上转型
3. 抽象的子类要么实现抽象类中所有的抽象方法,要么自己是一个抽象类
4. 抽象类有构造方法
-
abstract 不能和final共存
-
案例:
创建一个抽象类,定义两个抽象方法
定义一个子类,继承抽象类,实现这两个抽象方法
使用抽象类的多态,调用这两个方法
接口
定义格式:
interface 接口名{}
注意事项:
1. 接口中只能定义常量,默认public static final修饰
2. 接口中只能定义抽象方法(1.8之前) 默认是public abstract 修饰
3. 接口不能创建对象,使用子类向上转型
4. 接口的子类: 实现了接口的类 class 子类名 implements 接口1,接口2{}
5. 接口的子类要么实现接口中所有的抽象方法要么自己是一个抽象类
6. 一个类可以实现多个接口,并且可以在继承类的同时实现多个接口
7. 接口中没有构造方法
8. jdk8之后接口中可以定义已经实现的方法,但是必须使用static/default 修饰
9. 接口不能实现接口,只能继承接口,并且可以多继承
class 子类名 implements 接口1,接口2{}
案例
编写一个抽象类Animal,抽象类中包括属性:name(String类型),抽象方法:speak()。
编写一个宠物接口pet,接口中包括方法:eat()。
再编写一个类cat,实现该接口和抽象类中的所有方法。
speat(): “miao, my name is xxx”
eat(): “I want to eat some fish”
在main中进行测试,输出:
给猫赋值一个名字,调用speak,eat 方法
public class InterfaceTest2 {
public static void main(String[] args) {
Pet p = new Cat();
p.eat();
//p.speak();//speak 并不存在与Pet接口中,所有他是子类中独有的方法,在多态的时候,调不了
Animal a = new Cat(“小花”);
a.speak();
//a.eat();//不能调子中独有的
}
}
//the type animal is already defined: 代表本包中已经有该名字的类: 换一个名: 建一个包
abstract class Animal{
String name;
abstract public void speak();
}
interface Pet{
void eat();
}
class Cat extends Animal implements Pet{
public Cat() {}
public Cat(String name) {
this.name = name;
}
@Override
public void eat() {
System.out.println(“I want to eat some fish”);
}
@Override
public void speak() {
System.out.println("miao, my name is "+name);
}
}
抽象类和接口的区别:
1.一个类最多只能继承一个抽象类,但是可以实现多个接口
2.抽象类中既可以定义变量也可以定义常量,接口中只能定义常量
3.抽象类中既可以定义抽象方法,也可以定义非抽象方法,接口中能定义抽象方法(jdk8之前)
4.接口中没有构造方法,抽象类中有构造方法
5.接口只能继承接口不能实现接口,并且可以多继承
带包编译
和大多数入门程序一样先使用notepad++ 编写一个带包的HelloWorld
package com.doit.test;
class HelloWorld{
public static void main(String[]args){
System.out.println(“hello world”);
}
}
使用命令行如何执行:package com.doit.test;
手动式:
-
使用javac命令编译 javac 文件名.java javac HelloWorld.java
-
在类所在的文件夹下,按照包的格式把对应的文件夹创建出来,把.class文件拷贝到文件夹中
使用java 包名.类名 运行
自动式:
- javac(空格) -d (空格).(空格) 文件名.java
- java 包名.类名
导包: import 全类名;
顺序: package import class