JAVA面向对象3
一,访问权限修饰符
本类 | 同包下的类 | 子类 | 所有类 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
所有的访问权限修饰符都是成员修饰符,只能修饰成员,不能修饰局部(局部内容不能被外部访问)
能够修饰类的: public | default(默认的,省略)
如果想要使用父类中继承的,被protected修饰成员,需要在子类中通过继承关系使用
private修饰的内容只能在本类中使用
public class Person{
private int privateField;
int privateField; // default不能写
protected int privateField;
public int privateField;
}
二,extends继承
2.1 继承的作用
第一好处:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象。
第二好处:为了提高代码的复用性。(事实上,利用组合可以更好的实现代码复用!)
extends 的意思是“扩展”。子类是父类的扩展。
派生类|子类 : 对象的抽象
超类|基类|父类 : 是对子类的抽象
- 子类一旦继承父类,就有权使用父类中的成员
- 子类是父类的延续(使用父类的内容)+扩展(定义子类独有的内容)
一个父类可以存在多个子类
单继承机制-> 一个子类只能存在一个父类
2.2 如何实现继承
public class TestExtends {
public static void main(String[] args) {
Dogs dog = new Dogs();
dog.call();
dog.eat();
}
}
class Animal {
String eyes="眼睛";
String name="无名";
public void eat(){
System.out.println("动物吃东西!");
}
}
class Dogs extends Animal {
public void call(){
System.out.println("小狗汪汪叫!");
}
}
面向对象的设计原则之一: 开闭原则
为修改关闭,对扩展开放
三,Super关键字
super
是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。
1.在子类构造器的首行,调用父类中的构造器
2.区分子父类中同名成员问题
- 在子类中使用super指代子类内存空间中的父类对象
- 默认就近原则
- 通过super.调用父类成员
class Fu{
String name = "fu";
int a = 1;
public Fu(){
}
public Fu(String name){
System.out.println("父类带参构造...'");
this.name = name;
}
void haha(){
System.out.println("微笑...");
}
}
class Zi extends Fu{
public Zi(){
super("张三");//如果不写,默认调用父类的空构造
System.out.println("子类空构造...'");
}
void haha(){
System.out.println("嘿嘿笑");
}
void test(){
haha(); //默认就近原则
super.haha(); //通过父类对象调用父类中的成员
}
}
在静态方法中不能使用this,super关键字
四,Override方法的重写
4.1 overload重载与override重写的区别
共同点: 都是方法的特性
不同:
-
重载的三个条件:
-
同一个类中的多个方法
-
方法名相同
-
参数列表不同 | 方法签名不同
-
-
重写的三个条件:
-
不同的两个类
-
继承关系|实现关系
-
方法签名相同
调用:
如果子类中存在方法的重写,当通过子类对象调用的时候,会调用子类中重写的方法,会对父类方法进行屏蔽
作用:
当子类从父类中继承了某一个方法,方法满意,方法的实现|体不满意的时候,就可以在子类重新实现方法 ,重新定义方法体,重写方法
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
animal.shout();
Dog dog = new Dog();
dog.shout();
}
}
class Animal{
public void shout(){//与Dogs子类方法同名同参数列表
System.out.println("发出声音!");
}
}
class Dog extends Animal {
public void shout(){//与Animal父类同名同参数列表
System.out.println("汪汪汪!");
}
}
父类方法的重写:
- “==”:方法名、形参列表相同。
- “≤≤”:返回值类型和异常类型,子类小于等于父类。
- “≥”:访问权限,子类大于等于父类
以下方法不能重写:
- private 修饰的方法
- static 修饰的方法
- final 修饰的方法
检查是否为重新方法:
- 在方法的左侧行首存在o^标识
- 使用一个注解强制检查当前方法是否为一个重写方法@Override
五,final关键字
final 关键字
最终的
是成员修饰符,也可以修饰局部
- 被final修饰的变量为常量
- 被final修饰的方法不能被重写
- 被final修饰的类不能被继承–>太监类