package Java从入门到项目实战.抽象类与接口;
interface ImessageS{
public String message();
// 定义公共方法,被所有子类继承
public default boolean connect(){
System.out.println("建立订阅xbhog博客的通道.....");
return true;
}
// 建立static静态方法,可以通过接口名称直接调用
public static ImessageS getInstance(){
// 获得子类对象
return new MessageImple();
}
}
class MessageImple implements ImessageS{
public String message(){
if(this.connect()){
return "www.cnblogs.com/xbhog";
}
return "null";
}
}
public class 在接口中定义static方法 {
public static void main(String[] args) {
// 实例化子类接口对象
ImessageS msg = ImessageS.getInstance();
System.out.println(msg.message());
}
}
抽象类:
抽象类的特点:
含有抽象方法的类一定是抽象类
抽象类不一定还有抽象方法
抽象类中既可以有抽象方法也可以有非抽象放方法
如果子类继承了抽象方法,要么重写抽象类中的抽象方法,要么子类就声明为抽象类
不能创建对象,因为方法没有具体实现,创建对象没有作用,抽象类是用来继承的
基本定义
abstract class Message{
private String type;
public abstract String getConnectInfo();//抽象方法
public void setType(String type){ //普通方法
this.type = type;
}
}
7.抽象类的构造方法
package Java从入门到项目实战.抽象类与接口;
//构造抽象方法
abstract class abMessage{
private String type;
//此时抽象类中没有提供无参构造方法,所以在子类必须明确调用单参构造方法
public abMessage(String type){
this.type = type;
}
public abstract String getContentInfo();
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
class Database extends abMessage{
//子类构造
public Database(String type) {
//调用父类单参构造方法
super(type);
}
//覆写抽象类方法
@Override
public String getContentInfo() {
return "【"+super.getType()+"】数据库连接信息";
}
}
public class 构造方法 {
public static void main(String[] args) {
abMessage demo = new Database("xbhog");
System.out.println(demo.getContentInfo());
}
}
8.抽象类中定义static 方法:该类方法不受到抽象类实例化对象的限制
package Java从入门到项目实战.抽象类与接口;
abstract class message{
public abstract String getInfo();
public static message getInstance(){
return new datamessage();
}
}
class datamessage extends message{
@Override
public String getInfo() {
return "xbhog数据库连接";
}
}
public class 抽象类定义static {
public static void main(String[] args) {
//因为该方法被static修饰,全局使用message.getInstance相当于new datamessage();
message mes = message.getInstance();
System.out.println(mes.getInfo());
}
}
9.模板设计模式
package Java从入门到项目实战.抽象类与接口;
//抽象三个公共行为
abstract class Action{
static final int EAT = 1; //吃饭指令
static final int SLEEP = 5; //睡觉指令
static final int WORK = 10; //工作指令
public abstract void eat();
public abstract void sleep();
public abstract void work();
public void command(int code){
switch (code){
case EAT:{
this.eat();
break;
}
case SLEEP:{
this.sleep();
break;
}
case WORK:{
this.work();
break;
}
case EAT+SLEEP+WORK:{
this.eat();
this.sleep();
this.work();
break;
}
}
}
}
//具象化 机器人
class Rebot extends Action{
@Override
public void eat() {
System.out.println("机器人需要接通电源充电");
}
@Override
public void sleep() { } //机器人不需要睡觉
@Override
public void work() {
System.out.println("机器人按照固定的设置进行工作");
}
}
//具象化 人
class Person extends Action{
@Override
public void eat() {
System.out.println("人需要吃五谷杂粮来维持生命力");
}
@Override
public void sleep() {
System.out.println("不睡觉会死的");
}
@Override
public void work() {
System.out.println("每天工作996");
}
}
//具象化 猪
class pig extends Action{
@Override
public void eat() {
System.out.println("使劲吃,养肥了卖钱");
}
@Override
public void sleep() {
System.out.println("不睡觉,养不肥");
}
@Override
public void work() {
}
}
public class 模板设计模式 {
public static void main(String[] args) {
Action rebotAction = new Rebot();
Action personAction = new Person();
Action pigAction = new pig();
System.out.println("机器人行为---------");
rebotAction.command(Action.SLEEP);
rebotAction.command(Action.WORK);
System.out.println("人类行为----------");
personAction.command(Action.WORK+Action.SLEEP+Action.EAT);
System.out.println("猪的行为-------");
pigAction.command(Action.SLEEP);
}
}
综合案例练习:
实现相关代码:
package Java从入门到项目实战.抽象类与接口;
//定义人这个类
abstract class people{
private String name;
private String age;
public people() {}
public people(String name,String age){
this.name = name;
this.age= age;
}
public abstract void eats(); //定义抽象方法
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
//定义运动员抽象类
abstract class athletes extends people{
public athletes(){}
public athletes(String name, String age){
super(name,age);
}
// 抽象方法
public abstract void study();
}
interface speakEnglish{
public abstract void speak();
}
//定义教练的抽象类
abstract class coach extends people{
public coach(){}
public coach(String name,String age){
super(name,age);
}
public abstract void teach();
}
//篮球运动员
class Basketball_player extends athletes{
public Basketball_player(String name, String age){
super(name,age);
}
@Override
public void eats() {
System.out.println("篮球运动员正在吃饭....");
}
@Override
public void study() {
System.out.println("篮球运动员正在学习......");
}
}
//乒乓球远动员
class pingpang extends athletes implements speakEnglish{
public pingpang(String name, String age){
super(name,age);
}
@Override
public void eats() {
System.out.println("乒乓球运动员正在吃饭....");
}
@Override
public void study() {
System.out.println("乒乓球运动员正在学习......");
}
@Override
public void speak() {
System.out.println("乒乓球运动员练习英语口语......");
}
}
//乒乓球教练
class pingpangCoach extends coach implements speakEnglish{
public pingpangCoach(String name, String age){
super(name,age);
}
@Override
public void eats() {
System.out.println("乒乓球教练正在吃饭.....");
}
@Override
public void teach() {
System.out.println("乒乓球教练正在授课....");
}
@Override
public void speak() {
System.out.println("乒乓球教练练习英语口语.....");
}
}
//篮球教练
class BasketballCoach extends coach{
public BasketballCoach(String name, String age){
super(name, age);
}
@Override
public void eats() {
System.out.println("篮球教练正在吃饭");
}
@Override
public void teach() {
System.out.println("篮球教练正在授课......");
}
}
public class 综合案例实现 {
public static void main(String[] args) {
}
}