了解语法基本作用
1、包package学习目标:相同包下的类可以访问,不同包用import导包使用。
导包快捷键:1、点击+alt+enter;2、自动导包(file->settings->搜索auto->勾选),如下图:
注意:如果导入多个不同包下名称相同的类,则默认只能导入一个,其他的要带包命访问。
2、权限修饰符modifier成员能够被访问的范围,范围从大到小(private->缺省[包访问权限]->protected->public)
注意:protected的其他包中的子类可以访问,而且是通过子类对象访问
成员变量一般是私有的,方法是公共的,
3、final,最终(1)final修饰的类不能被继承。使用情况,比如工具类,工具类是为了通过类名直接调用其中的方法,不需要去继承。
(2)final修饰的方法不能被重写。重写时直接写函数名+回车即可快速写出。
(3)final修饰的变量有且只能被赋值一次。
变量分为局部变量和成员变量,成员变量包括实例成员变量和静态成员变量。
用final修饰实例成员变量是很没有必要的。用final修饰静态成员变量,被称为常量。
4、常量(1)常量概述和基本作用
组成:public static final 类型 名称 = 值;命名规范:英文单词全部大写用下划线连接。
好处:可以用于做系统的配置信息,方便程序的维护,方便重构,同时提高可读性。编译优化,宏替换,将常量替换为字面值,这样就不需要再去找变量了,提高性能。
(2)常量做信息标志和分类
好处:可读性好
5、枚举(1)枚举的概述:做信息标志和分类
在命令行窗口进行反编译,结果如下:
(2)枚举的使用场景演示
在企业中常量用的依旧多,可能是因为简单,像账号、密码这样就应该用常量。
6、抽象类abstract(1)抽象类(不完整的设计图)
抽象类、抽象方法用abstract修饰。抽象方法不能写方法体{},有抽象方法的类也必须用abstract修饰。抽象类就是做父类,让子类去继承,去实现具体的抽象方法。
//抽象类
abstract class Animal{
//抽象方法
abstract void run();
}
使用场景:子类都用这个方法,但又不同(比如动物可以跑,但有的快,有的慢)。
优点:提高代码复用性。
注意:子类必须具体实现父类中所有的抽象方法,或者子类也定义成一个抽象类。
(2)应用案例
父类
package com.laogao.practice.card;
public abstract class Card {
private String name;
private double money;
public abstract void pay(double money);
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
子类:金卡
package com.laogao.practice.card;
public class GoldCard extends Card{
@Override
public void pay(double money) {
System.out.println(getName()+"卡中余额:"+getMoney());
System.out.println("实际花费:"+money*0.8);
setMoney(getMoney()-money*0.8);
System.out.println(getName()+"卡中余额:"+getMoney());
}
}
测试类
package com.laogao.practice.card;
public class TestDemo {
public static void main(String[] args) {
GoldCard goldCard=new GoldCard();
goldCard.setMoney(1000);
goldCard.setName("老王");
goldCard.pay(500);
}
}
运行结果:
万能快捷键alt+enter,可以重写方法
可以回顾一下方法的重写,重写和抽象类的子类,这里都对父类中的方法进行了 *** 作,重写是覆盖了父类方法,抽象类子类是去具体实现了父类的抽象方法。
所以子类对抽象父类的具体实现,是通过重写方法实现的。
(3)抽象类特征、注意事项(笔试、面试、提高理解)
对于最重要的特征,可以采用反证法进行回答:假如抽象类可以创建对象,当用对象调用抽象类的抽象方法时,抽象方法不完整,没有方法体,报错。所以不可以创建抽象类对象。
Java语法严谨,一刀切,抽象类就像是不完整的设计图,不能用,不能实例化 。
final和abstract是什么关系?
(4)应用知识:模板方法模式
案例:学生写作文
建议使用final修饰模板方法,这样子类就不能重写了 ,不加也没事。
package com.laogao.practice.write;
//父类:学生
public abstract class Student {
public final void model(){
System.out.println("作文开头统一格式");
write();
System.out.println("作文结尾统一格式");
}
abstract void write();
}
package com.laogao.practice.write;
//子类:中学生
public class MiddleStudent extends Student {
@Override
void write() {
System.out.println("中学生专属作文主体");
}
}
package com.laogao.practice.write;
//子类:小学生
public class ChildStudent extends Student{
@Override
void write() {
System.out.println("小学生专属作文主体");
}
}
package com.laogao.practice.write;
//测试类
public class TestDemo {
public static void main(String[] args) {
MiddleStudent middleStudent=new MiddleStudent();
middleStudent.model();
ChildStudent childStudent=new ChildStudent();
childStudent.model();
}
}
7、接口interface
(1)概述、特点
接口是一种规范(规范一定是公开的,常量的public static和抽象方法的public abstract可以省略)。jdk8只能放常量和抽象方法:
package com.laogao.interfacep;
public interface Demo {
//接口相当于干爹,
// 里边都是抽象类或者常量,jdk8之前,
// 所以需要实现类去实现这些抽象的方法
public static String title="Java";//常量
String content="接口";//public static可以省略;
public abstract void study();//抽象方法
void review();//public abstract 可以省略
}
(2)基本使用:被实现implements
实现接口的类被称为实现类,一个类可以实现多个接口(接口可以被类单实现,也可以被类多实现)。创建实现类后,快捷键alt+enter快速实现抽象方法。
注意:一个类实现接口,必须重写全部接口的全部抽象方法,否则这个类需要定义成抽象类。
package com.laogao.interfacep;
public class DemoImplements implements Demo,Practice{
@Override
public void study() {
System.out.println("学习啦");
}
@Override
public void review() {
System.out.println("复习啦");
}
@Override
public void practice() {
System.out.println("练习啦");
}
}
(3)接口与接口的关系:多继承
接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。
(4)JDK8开始新增接口方法,三种(用到的很少)
接口可以当成一种特殊类,接口更加的抽象
切换编译jdk版本(如果版本低于1.9,则在接口中使用私有方法会报错):
(5)使用接口的注意事项(面试),了解即可
分析:1、接口中有抽象方法,接口像特别的抽象类,方法体是不完整的,所以不能创建对象。
2、 静态方法是通过接口名调用的,所以即便两个静态方法一样也不冲突。
3、父类就像亲爹,接口就像干爹。先父类再接口。
4、默认方法是通过实现类对象进行调用的,遇到多接口中有相同的默认方法,实现类会重写。(这些语法很偏,一般用不上)
5、若不同接口中有相同方法名,这种情况,报错,因为不知道调用谁)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)