修饰符
访问控制符修饰成员时的访问权限
修饰词 | 本类 | 同一个包中的类 | 子类 | 其他类 |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不可访问 |
默认 | 可以访问 | 可以访问 | 不可访问 | 不可访问 |
private | 可以访问 | 不可访问 | 不可访问 | 不可访问 |
static
1、静态的变量
由static修饰,属于类,存储在方法区中,只有一份,通过类名 . 进行调用,当所有的对象共享的资源的时候(图片,时评,音频)
2、静态的方法
由static修饰,属于类,存储在方法区中,只有一份,通过类名 . 进行调用,方法的操作只与参数相关与对象无关
3、静态代码块
属于类,在类加载期间进行调用,类只能被 加载一次,所以静态代码块也执行一次 ,初始化,加载静态资源的时候调用
代码应用
public class StaticDemo {
public static void main(String[] args) {
Too t1 = new Too();
Too t2 = new Too();
Too t3 = new Too();
System.out.println(t1.id+","+t2.id+","+t3.id);
}
}
class Too{
int id;
static int i = 0;
public Too(){
id = i++;
}
}
抽象类
抽象类应用
1、abstract修饰,只有方法的定义,没有方法的
2、抽象类:
abstract修饰
包含抽象方法的类,必须是抽象类。不包含抽象方法的类,也可以声明为抽象类
抽象类是不能被实例化的
抽象类是需要被继承的,继承了抽象类的子类,重写所有的抽象方法;变普通类为抽象类
1)abstract:关键字,用于修饰方法和修饰类
2)抽象方法:不同的方法是相似的,但是具体实现的内容不同
3)所以我们只能抽取他们的声明,没有具体的方法体。
4)抽象类:有抽象方法的类就是抽象类
5)一个类继承了抽象类,需要重写抽象类中的抽象方法
3、意义
抽象类是封装了子类中所共有的属性和行为------代码复用,
为所有的子类提供一种统一的类型-------向上造型
可以包含抽象方法为所有子类提供统一的入口
4、扩展
1、程序的设计规则
1)将所有的子类(派生类)所共有的属性和行为,抽到父类中(也叫超类)
2)所有的子类行为都一样,可以设计为普通类,如果所有的子类行为都不一样,设计为抽象方法
代码应用
package cn.llhc.det05;
public class AbstractDemo {
public static void main(String[] args){
}
}
//抽象类
abstract class Animals{
public abstract void eat();
public void sleep(){
}
}
class Dog extends Animals{
public void eat() {
System.out.println("狗吃骨头");
}
}
class Cat extends Animals{
public void eat() {
System.out.println("猫吃鱼");
}
}
抽象类的特点:
1、抽象方法之鞥放在抽象类中
2、抽象类和抽象方法都是被abstract修饰的
3、抽象类不能创建对象(不能被实例化)
4、抽象类可以有非抽象方法
5、抽象类和类的关系是继承
6、如果一个类继承了抽象类,要么重写所有抽象方法,要么就他本身设置成抽象类
代码应用
package cn.llhc.det05;
public class AbstractDemo01 {
public static void main(String[] args){
//创建一个篮球运动员对象
Programmer p =new Programmer();
p.name = "库里";
p.age =30;
p.gender = '男';
p.salary = 12335;
p.employees();
p.printInfo();
System.out.println("----------");
Manager m =new Manager();
m.name = "小明";
m.age =20;
m.gender = '男';
m.salary = 12;
m.employees();
m.printInfo();
}
}
abstract class Employees{
String name;//姓名
int age;//年龄
char gender;//性别
double salary;
public abstract void employees();
public void printInfo(){
System.out.println("姓名"+name+"年龄"+age+"性别"+gender+"工号"+salary);
}
}
class Programmer extends Employees{
public void employees() {
// TODO Auto-generated method stub
System.out.println("我是一名程序员!");
}
}
class Manager extends Employees{
double bonus;
public void employees() {
// TODO Auto-generated method stub
System.out.println("我是一名项目经理!");
}
}
接口
接口:接成是特殊的抽象类,即只包含有抽象方法的抽象类;接口不可以定义成员变量,但可以定义常量:接口之间是可以继承的
接口的实现
1)与继承不同,一个类可以实现多个接口,实现的接口直接用逗号分隔。当然,
该类需要实现这些接口中定义的所有方法;
2)一个类可以通过implements关键字”实现”接口。一个类实现了某个接口
后必须实现该接口中定义的所有方法。
class BigBall implements Baller,... {
public void run() {
System.out.printn("run..");
}
}
接口的优点
1)类与接口的关系:实现关系,而且是多实现,一个类可以实现多个接口,类鱼类之间是继承关系,java中的继 承是单一继承,一个类只能有一个父类,打破了继承的局限性。
2)对外提供规则(usb接口)
3)降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)
接口的特点
接口不可以被实例化
1)接口可以多实现,但继承是单继承
2)接口中可以定义方法,方法也有固定的修饰词 public abstreact
3)子类必须覆盖掉接口中所有的抽象方法,子类才可以实例化,否则子类是一个抽象类
4)接口中可以定义变量,但是变量必须有固定的修饰符,也称为常量,值不发生改变
final
1)修饰符,可以用于修饰类,成员变量,成员方法
2)只要是被final修饰的类,不能被继承,也不能有子类
3)final修饰的类,不能被重写
4)final修饰的变量,不可以被修改