面向对象的三大特征
1.面向对象语言的三大特征
封装
继承
多态
封装
封装的概念
将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。
封装的好处
封装的具体表现
属性使用private权限
方法使用public权限
例如:
public class Demo{
private String name;
public String getName (){
return name;
}
public void setName(String name){
this.name = name;
}
}
this关键字
this关键字代表自身类的对象
使用this关键字引用成员变量
使用this关键字引用成员方法
注意this关键字必须放在非静态的方法里面
在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式类引用成员变量名,常常用来区分同名的成员变量和局部变量
例如:
public class Demo{
private int a;
public Demo(int a){
this.a = a;
}
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}
}
实例1:
package com.ff.javaoop.day4;
/*
面向对象的三大特征:封装,继承,多态
*/
/*
封装:将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。
*/
public class Dog {
private String name;
private int age;
//用构造方法实现对私有方法的调用
/*public Dog(String name,int age){
if(name.length()<5){
this.name = name ;
}
this.age = age;
}*/
//为私有的属性提供专门的方法访问,可以实现控制
// this 表示的是当前正在访问的对象,this关键字必须放在非静态的方法中
public void setName(String name) {
if (name.length() <= 7) {
this.name = name;
this.eat();//在本类中访问私有权限的方法
}
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
//私有权限的方法
private void eat() {
}
}
package com.ff.javaoop.day4;
public class DogTest {
public static void main(String[] args) {
/*Dog dog = new Dog("dkjf",20);
Dog dog1 = new Dog("wangcai",23);
*/
Dog dog = new Dog();
dog.setName("王二狗");
dog.setAge(20);
System.out.println(dog.getAge());
System.out.println(dog.getName());
}
}
运行结果:
继承
人类都有姓名,年龄等属性和方法
学生类可以继承人类,但他们有自己特有的属性和方法如学号等
工人类可以继承人类,但他们有自己特有的属性和方法如工号等
小学生类、中学生类和大学生类都可以继承学生类
继承:继承是面向对象语言的一种设计思想,可以提高代码的可重用性(子类可以使用父类),代码的可扩展性(子类可以有自己的功能)
什么样的关系可以继承?
学生属于人
工人属于人
符合is-a关系的设计,使用继承
将子类工有的属性和行为放到父类中
继承的形式:
[访问权限修饰符] [修饰符] 子类名 extends 父类名{子类体}
例如:
public class Animal{
public void eat(){
}
}
public class Dog extends Animal{
public void play(){
}
}
//子类对象可以直接调用父类的方法,强调复用性
Dog dog = new Dog ();
dog.eat();
继承的传递性:
C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有非私有属性和非私有方法。
当一个没有继承任何一个类时,jvm会默认让类继承Object类,Object是 java为所有类提供的基类。
实例2.1:
package com.ff.javaoop.day4;
public class Animal {
private String name ;
private int age;
public void eat(String name){
System.out.println(name+"开饭了");
}
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;
}
}
package com.ff.javaoop.day4;
/*
Cat 类继承Animal
Cat是Animal的子类(派生类)
extends关键字
java中一个类只能直接继承一个类
*/
public class Cat extends Animal {
private String specie;
public void barking(){
System.out.println("喵喵叫");
}
public String getSpecie() {
return specie;
}
public void setSpecie(String specie) {
this.specie = specie;
}
}
package com.ff.javaoop.day4;
/*
Pig 类继承Animal
Pig是Animal的子类(派生类)
extends关键字
java中一个类只能直接继承一个类
*/
public class Pig extends Animal{
private String specie;
public void barking(){
System.out.println("哼哼");
}
public String getSpecie() {
return specie;
}
public void setSpecie(String specie) {
this.specie = specie;
}
}
package com.ff.javaoop.day4;
public class TestAnimal {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat("小咪");//继承父类的方法
cat.setAge(2);//继承父类的方法
cat.setName("小咪");//继承父类的方法
cat.barking();//小猫自己的属性
cat.setSpecie("折耳猫");//小猫自己的属性
Pig pig = new Pig();
pig.eat("猪猪");//继承父类的方法
pig.setAge(3);//继承父类的方法
pig.setName("猪猪");//继承父类的方法
pig.barking();//猪自己的属性
pig.setSpecie("非洲野猪");//猪自己的属性
System.out.println(pig.getName()+"今年"+pig.getAge()+"岁了");
System.out.println(cat.getName()+"今年"+cat.getAge(