Java·抽象类和接口
1.抽象类
(1)用absorb修饰的类称为抽象类
(2)抽象类中的抽象方法只许声明不许实现,没有方法体
(3)抽象类可以包含所有的普通类的任何东西
(4)抽象类不能new一个对象,必须用一个子类继承抽象父类
(5)子类必须覆盖重写抽象父类当中所有的抽象方法,除非子类也是抽象类
(6)不能使用final修饰
//抽象类继承的例子
public abstract class AbstractSinger {
protected String name;
protected String style;
protected String representative;
public void introduce() {
System.out.println("Hello , 我是歌手");
}
abstract void sing();
abstract void speak();
}
class PopSinger extends AbstractSinger {
public PopSinger() {
super();
// TODO Auto-generated constructor stub
}
public PopSinger(String name,String style,String representative) {
this.name = name;
this.style = style;
this.representative = representative;
}
void speak() {
System.out.println("我叫 "+name+",我的演唱风格为"+style+",我的代表作品有"+representative);
}
void sing() {
// TODO Auto-generated method stub
System.out.println("我是唱流行乐的");
}
}
//把歌手的图片在窗口画出要在与src同级的Folder中加入歌手的图片
import java.awt.*;
import javax.swing.*;
public class picture extends JFrame{
Image dzq=Toolkit.getDefaultToolkit().getImage("images/dzq.jpg");
//画窗口的方法
public void paint(Graphics g) {
g.drawImage(dzq, 0 ,0 , null);
Color c=g.getColor();
Font f=new Font("宋体",Font.BOLD,20);
g.setFont(f);
g.setColor(Color.cyan);
g.drawString("我叫 邓紫棋,我的演唱风格为流行风格,",50, 80);
g.drawString("我的代表作品有《画(Live Piano Session Ⅱ)》",50, 117);
}
//窗口加载
void launchFrame(){
setSize(800,526);//宽高300
setLocation(370,90);//屏幕位置
setVisible(true);
//重画窗口
while(true) {
repaint();
try {
Thread.sleep(4);//40毫秒每秒25次
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public class MainClass {
public static void main(String[] args) {
AbstractSinger singer = new PopSinger("邓紫棋","流行风格","《画(Live Piano Session Ⅱ)》");
singer.introduce();
singer.speak();
singer.sing();
picture p=new picture();
p.launchFrame();
}
}
2.接口
(1)是一种引用类型,是方法的集合,接口只有方法的特征没有方法的实现
(2)不能对接口直接进行对象实例化操作
(3)接口中只有全局变量,没有成员变量
(4)必须有子类,子类由implements实现接口
(5)接口的实现类必须重写接口中的所有抽象方法
(6)一个接口或类都可继承或实现多个接口
public interface Advertisement {
public void showAdvertisement();
public String getCorpName();
}
public class AdvertisementBoard {
public void show(Advertisement adver) {
System.out.println(adver.getCorpName()+"公司广告词");
adver.showAdvertisement();
}
}
public class HuaweiCorp implements Advertisement {
@Override
public void showAdvertisement() {
// TODO Auto-generated method stub
System.out.println("丰富人们的沟通与生活");
}
@Override
public String getCorpName() {
// TODO Auto-generated method stub
return "华为";
}
}
public class TestInterface {
public static void main(String[] args) {
AdvertisementBoard board = new AdvertisementBoard();
board.show(new HuaweiCorp());
}
}