JAVA中封装与继承重点总结

一、修饰类

Public: 类class   ß   公共的,任何都能访问

默认: 类class   ß   包级私有访问(同包内可用)

 

类成员的访问修饰:

作用域

同一类中

同一包中

子类中

任何地方

修饰符

 

Private

可以

不可以

不可以

不可以

默认修饰符

可以

可以

不可以

不可以

Protected

可以

可以

可以

不可以

Public

可以

可以

可以

可以

 

二、修饰类成员

Private(私有的)       本类

默认(同包内可用)     本类、同包

Protected(受保护的)   本类、同包、不同包的子类(访问修饰符大于默认)

Public(公共的)        任何地方

Public>protected>默认>private

 

Static 修饰符(静态的)

Static 可以用来修饰:

  1. 成员变量:静态变量,可以直接通过类名访问
  2. 成员方法:静态方法,可以直接通过类名访问
  3. 代码块:静态代码块,当Java虚拟机加载类时,就会执行该代码块

 

Static 变量

  1. 类变量:静态变量

Public class Student{

Public static String email{}

 

}

调用的时候用类名就可以调用

System.out.pringln(Student.email);(点出来的时候图标上会有一个红色的小s)

被static修饰的变量

在内存中只有一个拷贝

类内部,可以在任何方法内直接访问静态变量

其他类中,可以直接通过类名访问

  1. 实例变量

没有被static修饰的变量

Public class Student{}

每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

 

实例变量和类变量的区别:

  1. 实例变量不使用static去修饰,而类变量要用static修饰
  2. 一旦使用static 修饰变成类变量,就可以用类名直接调用;

Student stu = new Student();

stu.email;

而不用static修饰的实例变量,必须用实例调用

student.email;

  1. 类变量在内存中只有一个拷贝

Java虚拟机只给static变量分配一次一个内存

 

static变量的作用:

1. 能被类的所有实例共享,可作为实例之间进行交流的共享数据

2. 如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间

3. 方法里不能定义静态变量

静态变量只能在类里定义

   方法里只能调用静态变量

 

static方法:

静态方法:可直接通过类名访问

类名直接调用就是静态的

student.method();

  1. 静态方法中不能使用this和super
  2. 不能直接访问所属类的实例变量和实例方法
  3. 可直接访问类的静态变量和静态方法

实例方法:通过实例访问

可直接访问所属类的静态变量、静态方法、实例变量和实例方法

静态方法必须被实现

 

Static代码块:

JVM加载类时,加载静态代码块

  1. 如果有多个静态块,按顺序加载
  2. 每个静态代码块只会被执行一次

 

使用继承

  1. 编写父类

[访问修饰符] class Pet{

//公共的属性和方法

}

  1. 编写子类,继承父类

继承关键字

[访问修饰符]class Dog extends Pet {

//子类特有的属性和方法

}

 

继承是Java中实现代码重用的重要手段之一。Java中 只支持单根继承,即一个类只能有一个直接父类

继承pet 父类  (Java中一个父类可以有多个子类,子类只能有一个父类)

名字+ extends + pet字类 可以用父类里面的东西 可以避免代码重复命名

super(传参)    调用父类构造方法。只能写一句,必须写在第一句

this(传参)     调用当前的构造方法

调用字类的,就会先调用最高的类,然后再依次往下构造(不管没有特殊指明父类的那一个都会遵循这个法则)

 

子类 继承父类所有的属性和方法(private除外)

        会调用父类的构造方法,如果没有明显调用则调用默认空间构造方法

       class类{

              private  属性

              public get/set

              空构造

              带参构造

              方法

       }

子类继承父类的什么?

  1. 继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里
  2. 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里

 

子类不能继承父类的什么?

  1. Private成员
  2. 子类与父类不在同包,使用默认访问权限的成员
  3. 构造方法,但是可以调用

 

子类访问父类成员:

访问父类构造方法:

super();

super(name);

访问父类属性:

super.name;

访问父类方法:

super.print();

 

1. 使用super关键字,super代表父类对象

2. 在子类构造方法中调用且必须是第一句

3. 不可以访问父类中定义为private的属性和方法

 

小结:

  1. super关键字来访问父类的成员
  2. super只能出现在子类的方法和构造方法中
  3. super调用构造方法时,只能是第一句
  4. super不能访问父类的private成员

 

继承条件下的构造方法:

继承条件下构造方法的调用规则:

  1. 子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法(系统默认调用父类的无参构造方法)
  2. 子类构造方法通过super显式调用父类的有参构造方法(执行父类相应构造方法,而不执行父类无参构造方法)
  3. 子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则

 

快捷键:alt + shift + s

Java只支持单根继承:

一个类只能有一个直接父类

一个类可以有多个间接父类

继承方法就是用super。

Object是Java中的祖宗类

 

Super的使用

  1. 子类方法重写父类方法
  2. 在子类中定义了和父类同名的成员变量

(super可以使被屏蔽的成员可见)

 

super和this

区别

This

(一定要写在构造方法的首行)

Super

(包括间接的父类)

访问属性

访问本类属性

如果没有则从父类找

访问父类中的属性

访问方法

访问本类方法

如果没有则从父类找

访问父类中的方法

访问构造

调用本类构造方法

放在构造方法首行

调用父类构造,放在子类构造方法首行

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值