封装
将属性私有化 通过公有化方法来访问属性。
约定:提供两个公有方法,一个是得到属性值,另一个是设置属性值
得到属性值的方法约定 方法名称为 public 返回的数据类型 get加属性名(){ return this.属性 }
设置属性值的方法约定 方法名称为 public void set加属性名(数据类型 设置的值){ this.属性=设置的值; }
在其他方法中要获得和更改属性值只能使用公有的方法。
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不
仅可以跨类访问,而且允许跨包(package)访问。
private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以
及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、
属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default(friendly):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访
问。
类的只有两种public,default(不同包不可以访问
public--都可访问(公有)
private--类内可访问(私有)
protected--包内和子类可访问(保护)
不写(default)--包内可访问 (默认)
public>protected>default>private
Java 方法默认访问级别 : 包访问
Java 类默认访问级别 : 包访问
对于一个Class的成员变量或成员函数,如果不用public, protected, private中的任何一个修饰,那么该成员获得“默认访问控制”级别,即package access (包访问)。
属于package access的成员可以被同一个包中的其他类访问,但不能被其他包的类访问。
包访问的控制力弱于private,但强于protected。因为一方面,只要是子类,不管子类与父类是否位于同一个包中,那么子类都可以访问父 类中的protected方法。但是一旦位于原类的包外,不管是否是其子类,都无法访问其属于package access级别的成员。而另一方面,一个类可以访问同一个包中另一个类的package access成员,同时也能访问其protected成员。
(注:package是Java中的关键字,虽然包访问也是一种访问控制级别,但关键字”package”只能用来表示类属于哪个包,而不能像”private”,”public”那样放到成员变量或函数前面,作为访问控制修饰符。)
访问级别保护的强度:public<protected<默认<private
构造方法
系统会自动生成一个无参构造方法。
但是当我们声明了一个有参构造方法后,系统将不再生成无参构造方法,如果还是需要 需要自己声明。
方法重载
可以定义同名的方法,但是传入的参数不同,调用的时候会依据传递的参数 来选择使用哪个方法。
在类中发现方法不能满足我们的需求 但是我们又想给它调用的时候能够实现多种数据类型传入的调用
在类当中写多个相同功能 但是传入的参数的个数和类型 都不同 这种行为就叫做方法的重载。
继承
只能单继承可以多派生
当父类与子类的属性或方法重名时,子类会优先调用自己的属性或方法。
子类继承父类 用super表示调用父类里的属性或方法,和this类似。
当父类的方法不能满足子类的要求时,子类可以重写父类的方法以满足需求,父类的方法将被覆盖掉。
子类调用父类的构造方法 只能写在构造方法体的第一行 super();
即使用了super java中规定 每次new时只调用一次构造方法
对于子类来说
构造方法不能被继承
在实例化对象的时候会从顶端(Object)的父类开始依次调用构造方法
对于java来说 所有类都继承于Object类 Object是所有类的超类
final用于修饰类表示这个类无法被继承。
abstract 抽象的关键字 抽象类不能实例化
被abstract修饰的方法被称为抽象方法,他不能有方法体。即没有{}
抽象方法被继承时必须重写override(被实现);
只要有一个抽象方法那么这个类必须为抽象类。
@override 是注解 可以帮你检查是否实现了所有的抽象方法。 实现不一定要有代码,只要存在{}就是实现了。
注意:抽象类继承抽象类 同时也继承了抽象方法 可以在这里实现也可以不实现,让继承我的子类来实现。
子类重写父类的方法或属性 不能给比父类更严格的权限。
重载的方法 名称相同 类型可以不同,但是传入的参数必须不同类型或不同数目.
子类重写父类的方法 名称 类型 与传入的参数都必须相同。只能在方法体内有变化。
修饰关键词只能更宽松 不能更严格
重写基类:
Object 里的 toString 方法。
可以写
public String toString(){ return “你想要调用这个类的对象时 返回的字符串”;}
例如:
Student类
package Demo;
public class Student {
private String name;
public String toString(){
return "你好 我是Student类的对象!";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
};
}
Test类
package Demo;
public class Test {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student); //不重写toString 出来的是
Demo.Student@15db9742
}
}
最后输出的是 你好 我是Student类的对象