- 封装(Encapsulation)是面向对象的基本特征之一。为实现封装有两个步骤:其一是将成员变量私有化,目的是为了将不能暴露的成员隐藏起来,在定义成员之前添加修饰符private;其二是将成员方法定义为公共的,目的是为了用公共方法来暴露对隐藏成员的访问,在定义成员变量时给函数添加上修饰符public。
//首先创建一个Person类
public class Person {
private String name; // private 私有方法修饰变量,把变量封装起来
private int age;
//其次构造有参数和无参数方法
public Person() { //无参构造方法
}
public Person(String name, int age) { //有参构造方法
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() { //最后重写toString方法
return "Person{" +"name='" + name + '\'' +", age=" + age +'}";
}
}
- 注意事项:
- 私有成员只能在定义它的类的内部被访问,在类的外部不能被访问。
- 在通常情况下,可以将成员变量定义为private,通过public函数(方法)对其进行访问。如果要给一个成员赋值,可以使用setter函数;如果想要获得该出量的值,可以使用getter函数。
- private和public都是访问区分符。
- 继承(Inheritance)它是是面向对象的重要特征,其中继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类;而多继承是一个子类可以有二个以上的父类。
-
在Java中,被继承的类成为父类、基类或者超类,子类可以直接访问父类中的非私有的属性和行为。
- 继承是通过 extends 关键字让类与类之间产生继承关系,格式如下:
class 子类 extends 父类{
代码段;
}
继承的特点:
1.Java只支持单继承,不支持多继承。
//一个类只能有一个父类,不可以有多个父类。
class 子类 extends 父类{} //正确写法
class 子类 extends 父类1,父类2,父类3...//错误写法
2.Java支持多层(重)继承(继承体系)。
class A{}
class B extends A{}
class C extends B{}
super和this有什么区别
- super是一个关键字,代表父类的存储空间标识。
- super和this的用法相似
- this代表对象的引用。
- super代表当前子类对父类的引用。
运用
- 当子父类出现同名成员时,可以用super进行区分。
- 子类要调用父类构造函数时,可以使用super语句。
动态多态的理论基础是父类引用可以指向子类对象,代码演示如下:
package chenf;
class Dialog{
public void show() {
System.out.println("Dialog.show");
}
}
class FontDialog extends Dialog{
public void show() {
System.out.println("FontDialog.show");
}
}
public class Main {
public static void main(String[] args) {
Dialog cf=new FontDialog(); //父类引用指向子类对象。
cf.show();
}
}
注:show函数在父类和子类中都存在,其中,如果在子类中没有show函数,则会调用父类的show函数;如果父类中没有show函数,代码则会报错!
多态创建对象:
1.有继承关系
2.有方法的重写
3.父类引用指向子类对象(父像子)(允许将子类类型的指针赋值给父类类型指针)
使用多态:
1.函数传入的形参可以是父类类型,而实际传入的可以是子类对象
......
public class Main{
public static void toCenter(Dialog cf){
cf.show;
}
public static void main(String[] args){
FontDialog cf=new FontDialog();
toCenter(cf); //形参是父类,实参是子类,每个子类都可以被这个函数 *** 作
}
}
- 2.函数的返回类型是父类类型,而实际返回的可以是子类对象
......
public class Main{
public static Dialog fun(){
return FontDialog();
}
public static void main(String[] args){
Dialog dialog=fun();
dialog.show();
}
}
父类和子类对象的类型转换
- 根据多态性,子类对象无需转换就可以赋值给父类引用
- 严格来讲父类类型对象是无法转换为子类类型的
Dialog dialog=new Dialog();
FontDialog cf=dialog;
错误
但是有一种特殊情况,如果父类类型对象原来就是某一种子类类型对象,则可以转换为相应的子类类型对象,只需强制转换即可
Dialog dialog=new FontDialog();
FontDialog fd=(FontDialog)dialog;
正确
但是有一种特殊情况,如果父类类型对象原来就是某一种子类类型对象,则可以转换为相应的子类类型对象,只需强制转换即可
Dialog dialog=new FontDialog();
FontDialog cf=(FontDialog)dialog;
正确
最后可以用instanceof 函数判断是否是某一类型;格式“对象名 instanceof 类名”,其中正确返回true,错误则返回false。
新手小花在此小露一手,望各位大佬不喜勿喷,不吝赐教,点赞鼓励~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)