/*封装类*/
public class Encapsulation_Demo {
private String name;
private int 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;
}
}
/*实现类*/
public class Encapsulation_Demo_Test {
public static void main(String[] args) {
Encapsulation_Demo ed = new Encapsulation_Demo();
ed.setName("Fatli");
ed.setAge(20);
System.out.println("Name:"+ed.getName()+" "+"Age:"+ed.getAge());
}
}
entity 实体类:就是属性类,通常定义在 model 层里面。一般的实体类对应一个数据表,其中的属性对应数据表中的字段。实体类就是一个拥有 getter 和 setter 方法的类。 entity (实体类)的作用一般是和数据表做映射。实体类通常总是和数据库之类的(所谓持久层数据)联系在一起。介于 dao 和 service 之间。
public abstract class Pet { //抽象类
public abstract void toHospital(); 抽象方法
}
public abstract class AbstractClass{ //里面至少有一个抽象方法
public int t; //普通数据成员
public abstract void method1(); //抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法
public abstract void method2();
public void method3(); //非抽象方法
public int method4();
public void method3(){
…… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
publi int method4 (){
…… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
}
构造方法是一个与类同名且没有返回值类型(连 void 也不能有)的方法。用以初始化对象。构造方法分为两种:无参构造方法、有参构造方法。 Java 类隐式声明一个无参构造方法。 Person p = new Person() 中的 Person() 和 public Base(){System.out.println("父类的无参构造方法");}
抽象方法 & 抽象类:
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
实例:
public abstract class Base {
//抽象类中可以没有抽象方法,但包含了抽象方法(没有方法体)的类就必须被定义为抽象类
public abstract void method1();
public abstract void method2();
public void method3(){}
//没有抽象的构造方法。
//public abstract Base(){}
//没有抽象的静态方法。
//static abstract void method4();
public Base(){
System.out.println("父类的无参构造方法");
}
static void method4(){
System.out.print("静态方法表示类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此,当前类必须为静态方法提供实现");
}
}
//如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
public abstract class Sub1 extends Base {
public void method1() {
System.out.println("重写父类的method1");
}
}
//否则就必须实现父类的所有抽象方法
public class Sub2 extends Base {
public Sub2(){
System.out.println("子类的无参构造方法");
}
@Override
public void method1() {
System.out.println("重写父类的抽象方法method1");
}
@Override
public void method2() {
System.out.println("重写父类的抽象方法method2");
}
}
public class Test {
public static void main(String[] args) {
//抽象类不允许实例化
//Base base=new Base();
//抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
//抽象类不能被实例化(不能生成对象),但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例(多态)
Base sub=new Sub2();//输出:父类的无参构造方法 <br /> 子类的无参构造方法
sub.method1(); //输出:重写父类的抽象方法method1
sub.method4(); //输出:静态方法表示类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此,当前类必须为静态方法提供实现
}
}
抽象类与接口的区别:
在 interface 中所有的方法都被隐式声明为 public abstract 的(接口是一种特殊的抽象类,所有方法都是(隐式声明)抽象方法,接口可以让所有的类去实现 implements (而抽象类的被继承 extends ));所有的数据成员都被隐式声明为 public static final 的,即使你没有声明。实现 interface 的类,其 interface 中所有的方法必须被“实现”,否则这个类成为一个抽象类。
封装
定义: 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
目的: 增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
基本要求: 把所有的属性私有化,对每个属性提供 getter 和 setter 方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写 toString 方法,但这不是必须的。
封装的步骤:
类成员的访问修饰符:
实例:
封装类 < POJO ≈ entity实体类 < JavaBean
继承
目的: 实现代码复用(重用)。
介绍: 当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子类自动拥有了父类的属性和方法。
注意: 父类的私有属性和构造方法并不能被继承。另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。子类不能继承父类中访问权限为 private 的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到 protected 。
使用继承的方法:
子类访问父类成员:
super();
super.name
super.print();
super 关键字用以访问父类成员:
继承条件下构造方法的调用规则:
继承和权限:
方法重写
方法的重写或方法的覆盖(overriding):
super.方法
(或者父类名.方法
)的方式来调用父类中被覆盖的方法方法重写的规则:
方法重写 override 与方法重载 overload 区别:
Object 类
Object类是所有类的父类
Object 类被子类经常重写的方法
equals()
方法与操作符==
equals()
比较两个对象是否是同一个对象,是则返回 true==
1 == 2
多态
概念: 相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
实现多态的三个必要条件: 继承、重写、向上转型。只有满足这三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
多态的实现方式:
多态性的主要表现
多态的好处:程序的可扩展性及可维护性增强。
实例:
类型转换
向上转型
<父类型> <引用变量名> = new <子类型>();
向下转型
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
instanceof
抽象类
抽象类 & 普通类:
抽象方法:以 abstract 修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法应该被子类的方法所重写(重载主要发生在同一个类的多个同名方法之间;重写发生在子类和父类的同名方法之间)。 抽象方法的修饰符只能用 public 或者 protected 修饰或者不用修饰符,不能被 static , private 修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用 private 修饰; static 修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义。
public abstract void method1();
public void method2(){ …… }
Person p = new Person()
中的Person()
和public Base(){System.out.println("父类的无参构造方法");}
实例:
抽象类与接口的区别:
public abstract
的(接口是一种特殊的抽象类,所有方法都是(隐式声明)抽象方法,接口可以让所有的类去实现 implements (而抽象类的被继承 extends ));所有的数据成员都被隐式声明为public static final
的,即使你没有声明。实现 interface 的类,其 interface 中所有的方法必须被“实现”,否则这个类成为一个抽象类。接口 interface
接口的几个基本特性:
实例: