类
类将现实世界中的概念模拟到计算机程序中
什么是类
类其实是个模板,是一个具有共同特点的集合。比如说饮料:都有包装,都有颜色,都有味道,都是被喝的东西这些都行都是抽象出来的属性和行为。
类的构成
类是由抽象出的属性和行为组成的对一种实物的描述实物的属性是类的成员变量,实物的行为是类的方法
例:创建一个Text的类
public class Text(){}
注意事项
Java类和对象的概念
类的概念
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
对象的概念
现实世界中任何物体都能被当作是对象,不过在正常开发的时候通常只是在一定的范围去考虑和认识与系统相关的事物并用系统中对象抽象的表示他
们
什么是对象
对象和类的关系
类是物体属性和行为的模板对象是物体的具体实现
创建和引用对象
封装
封装的概念
在面向对象程式设计方法中,封装是指一种将抽象性函数式接口的实现细节部分包装、隐藏起来的方法
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装的作用
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
1、减少耦合
良好的封装能够减少耦合提高系统独立性
2、可重用性
封装重复代码,提高软件的可重用性
3、精确控制
可以对成员变量进行更精确的控制
4、安全性
隐藏信息,实现细节,降低了构建大型系统的风险
实现封装的步骤
1、修改属性的可见性来限制对属性的访问
关键字 private
public classPerson{
private String name;
private int age;
/*
这段代码中,使用 private 关键字 将name和age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏
*/
}
2、对每个值属性提供对外访问的方法创建一对取赋值方法
get/set方法和this关键字
public class Person{
private String name;
private int age;
//使用get/set方法实现对变量name与age的读取与写入 (可以使用alt+insert快捷生成)
public String getName(){
return name;
}
public int getAge(){
return age;
}
//该方法中的this关键字是为了解决实例变量 (private String name) 和局部变量(setName(String name)中的name变量)之间发生的同名的冲突
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age= age;
}
}
修饰符
访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。例如:默认访问修饰符私有访问修饰符-private、公有访问修饰符-public、受保护的访问修饰符-protected
常用的访问控制修饰符
非访问控制修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。例如:static 修饰符、final修饰符abstract 修饰符、synchronized 和volatile 修饰符
常用的非访问控制修饰符
继承
继承的概念
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的作用
子类拥有父类的属性和方法,减少重复的代码,维护性高
代码简洁,提高了代码的复用性
继承关键字
class——定义类
interface——定义接口
extends——继承父类
implements——实现接口
extend和implements的区别
相同点
都属于Java中的继承
都发生在多各类中
不同点
extends只能单继承,implements可以实现多继承
extends继承父类时,父类中可以存在方法的默认实现而implements在实现接口时接口中不能有方法实现
extends发生在子类和父类之间,implements发生在实现类和接口之间
继承的特性
子类拥有父类非 private 的属性、方法
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
Java 的继承是单继承,但是可以多代继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性
示例
extends关键字
public class Animal {
private String name;
private int id;
public Animal(String myName, String myid) {
//初始化属性值
}
public void eat() { //吃东西方法的具体实现 }
public void sleep() { //睡觉方法的具体实现 }
}
//继承Animal
public class Penguin extends Animal{
}
super 与 this 关键字
一、我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
二、super调用构造方法时,只能是第一句
三、super不能访问父类的private成员
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
继承的优点
1、提高代码的复用性
子类中重复的代码只需要在父类中写一遍,所有子类都可以应用
2、提高代码的可维护性
只需要修改父类属性和方法,所有的子类都会应用
3、提高类和类之间的关联性,为多态做基础
其实这也是继承的缺点,增加了类和类之间的耦合度,耦合度的增加意味着后期扩展性的降低