本周所学较多,java语法基本学习完毕,本次对这些内容进行总结
抽象
抽象类在第一阶段已经进行总结,本模块对其进行再深化
1、抽象类的使用注意事项
(1)抽象类的默认构造器一定是公有的,否则子类继承就不存在意义;
(2)抽象类中不一定包含抽象方法,有抽象方法的类一定是抽象类——就像顺口溜一样,子类继承抽象类,必定重写该类的抽象方法
2、抽象类实现模板设计模式
首先,针对设计模式,就是前人总结出的优雅规则化的一种编码方式,作为一个靠谱的程序员,我感觉是需要去理解和使用的;
模板设计模式:优化代码架构,提高代码复用性,最大程度减小代码的冗余,以部分实现,部分抽象的方式去进行处理和应用。
/** 1、当调用想要实现的具体放时,一般是通过该抽象类的抽象类子类去调用该方法,抽象类子类会对该抽象方法进行重写,即赋予想要添加的业务,或者添加自己想要的表达;
* —— 即抽象类中已经确定的由抽象的父类去进行,未确定的封装成抽象方法交给子类去进行具体的实现
* 2、其中调用规则依旧遵守就近原则:当通过子类调用父类的方法时,子类中没有,直接调取的是父类的方法,当调取父类方法时,其中包含抽象方法,因为是子类发出的,因此就近选取子类的方法
* —— 算是真正理解了一种设计模式
* */
public class AbstractDemo_one {
public static void main(String[] args) {
Boy boy = new Boy();
boy.life();
Girl girl = new Girl();
girl.life();
}
}
class Boy extends TemplateModel{
@Override
protected void think() {
System.out.println("think girl");
}
}
class Girl extends TemplateModel{
@Override
protected void think() {
System.out.println("think play");
}
}
abstract class TemplateModel{
private final String eat = "eat food.";
private final String sleep = "sleep in the bed.";
public void life(){
System.out.println(eat);
System.out.println(sleep);
think();
}
protected abstract void think();
}
接口
1、接口时一种骨架,是一种规范,接口的关键字是interface;jdk1.8及之前的版本中,接口中包含两个部分:常量和抽象方法
public interface InterfaceDemo_one { //可见 public,static,final都是默认的 public static final String str = "test"; //public abstract是默认的 public abstract void tsst(); }
2、接口的使用规则,这块可以去横向对比下
类与类之间是单继承
类与接口之间是多实现
接口与接口之间是多继承——接口是一种特殊类,特殊就特殊在多继承
public class InterfaceDemo_three {
public static void main(String[] args) {
X x = new X();
x.likeGirl();
}
}
/**
* 一个类实现了已经多实现的那个接口,相当于调用了自身与整合的两个接口
*/
class X implements People{
@Override
public void think() {
}
@Override
public void likeGirl() {
}
@Override
public void play() {
}
}
/**
* 接口是多实现的
*/
interface People extends Boy, Girl {
void think();
}
interface Boy {
void likeGirl();
}
interface Girl {
void play();
}
3、在jdk1.8之后,类中添加了实例方法,静态方法,私有方法时
代码块
类中包含了五大成分:成员变量,成员方法,代码块,构造器和内部类;本模块对代码块进行阐述,代码块分为两种,静态代码块和动态代码块;
1、静态代码块
(1)用法:static{}
(2)作用:去初始化加载静态资源,当调用时,静态资源已经加载完毕,一个字:优雅
public class StaticCodeDemo_one {
public static List<String> cards = new ArrayList<>();
static {
System.out.println("加载静态模块");
cards.add("111");
cards.add("222");
}
public static void main(String[] args) {
System.out.println("方法执行");
System.out.println(cards);
}
}
2、实例代码块
(1)用法:{}
(2)作用:创建类之中的代码模块,为每个实例对象加载资源——实例代码块是在构造器中使用的
public class SingleCodeDemo_two {
public static void main(String[] args) {
test t = new test();
}
}
class test{
{
System.out.println("实例代码模块·");
}
public String test(){
return null;
}
}