⾯向对象语⾔的三⼤特征
⽂章⽬录
⾯向对象语⾔的三⼤特征
⾯向对象的三⼤特征是:封装、继承、多态
封装
封装的概念:
就是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,⽽是通过该类提供的⽅法来实现对隐藏信息的操作与访问。封装的好处:
1、可以隐藏类的实现细节
2、⽅便加⼊控制语句
3、⽅便修改实现
4、只能通过规定⽅法进⾏访问
权限修饰符private就拿来可以进⾏封装
public class Demo {
public static void main(String[] args){
Person person =new Person();
//存数据
person.setName("张三");
person.setAge(20);
//读出数据
System.out.Name());
System.out.Age());
}
}
public class Person {
java面向对象的特征有哪些方面//这就是⼀个简单的封装,将name和age进⾏了封装,使外界不能直接调取赋值// 需要通过⽅法的调⽤才能存⼊数据或查询出数据
private String name;
private int age;
public void setName(String name){
//必须调⽤这个⽅法,才能存取name这个变量的值
if(name !=null){
//this表⽰当前正在操作的对象
this.name = name;
}
}
public void setAge(int age){
//必须调⽤这个⽅法,才能存取age这个变量的值
if(age >=0){
this.age = age;
}
}
public String getName(){
//调⽤这个⽅法,才能读取到name这个值
return name;
}
public int getAge(){
//调⽤这个值,才能读取⼤age这个值
return age;
}
}
关键字:this
this关键字代表⾃⾝类的对象。
使⽤this关键字引⽤成员变量,
使⽤this关键字引⽤成员变量
this关键字必须放在⾮静态⽅法⾥
上⾯的代码⾥也有演⽰出this这个关键字作⽤
继承
⼉⼦ 继承 ⽗亲
继承是⾯向对象程序设计不可缺少的设计思想,是实现代码可重复使⽤的根基,是提⾼代码可拓展性的主要途径。
继承就是从已有的类中派⽣出新的类,新的类能吸收已有类的属性和⾏为,并能扩展出新的能⼒
优点:⼉⼦可以使⽤⽗亲的功能, 提⾼代码的复⽤性
在Java中使⽤extends关键字来表⽰继承关系。
Java不⽀持多继承,单继承使得Java的继承关系很简单,⼀个类只能存在⼀个直接的⽗类。
继承之后⼦类可以调⽤⽗类的所有⾮私有属性和⾮私有的⽅法。
继承具有传递性,C类继承了B类,B类继承了A类,那么C类就具有了B类和A类的所有⾮私有的属性和⽅法。
当⼀个类没有继承任何类时,JVM就会默认的继承Object类,如果有继承⽗类,那么它的⽗类或者⽗类的⽗类就会继续Object类。(继承的传递性)
Object类是java内所有类提供的⼀种基类。(⽗类、超类)
何时使⽤继承
符合is-a关系的设计,使⽤继承。将⼦类共有的属性和⾏为放到⽗类当中
继承也是代码重⽤的⼀张⽅式
package;
public class Test {
public static void main(String[] args){
Dog xh =new Dog();
//虽然Dog类中什么都没有写,但是因为extends继承了Animal类,
// 所以也就有了Animal中的⾏为属性(⾮私有的)
xh.setName("⼩⿊");
xh.setAge(6);
xh.eat();
xh.sleep();
//调⽤⼦类特有的⾏为属性
xh.setType("哈⼠奇");
xh.play();
}
}
package;
//⽗类
public class Animal {
private String name;
private int age;
public void eat(){
System.out.println("动物吃东西");
}
public void sleep(){
System.out.println("动物睡觉");
}
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;
//Dog类,继承Animal类
public class Dog extends Animal {
private String type;
public void play(){
System.out.println("狗会接飞盘");
}
public String getType(){
return type;
}
public void setType(String type){
}
}
继承中的构造⽅法
⼦类构造⽅法总是先调⽤⽗类的构造⽅法,默认情况下,调⽤⽗类⽆参构造⽅法,可以在⼦类构造⽅法的第⼀⾏,使⽤super关键字调⽤⽗类的任意构造⽅法。
如果要使⽤super,必须写在所要调⽤⼦类构造⽅法内的第⼀⾏。
如果⼦类的构造⽅法没有显⽰的调⽤基类的构造⽅法,则系统默认的调⽤⽗类⽆参的构造⽅法。
当创建⼀个⼦类对象时,会在⼦类的构造⽅法中调⽤⽗类的构造⽅法,先去初始化⽗类。
默认会在构造⽅法中的第⼀⾏使⽤super()调⽤,如果显⽰的使⽤super调⽤,也必须在第⼀⾏。可以使⽤super()传参,调⽤指定的构造⽅法。
package;
public class Test {
public static void main(String[] args){
Dog xh =new Dog();
}
}
package;
//Dog类,继承Animal类
public class Dog extends Animal {
private String type;
public Dog(){
//super(); //⽤来调⽤⽗类的构造⽅法,是默认存在的,如果我们使⽤super显⽰的调⽤,
// 则必须放在构造⽅法的第⼀⾏
super("⼤猫");
System.out.println("Dog的⽆参构造");
}
//⼀般情况下,当出现有参的构造⽅法时,尽量写上⽆参的构造⽅法。
}
package;
//⽗类
public class Animal {
private String name;
private int age;
public Animal(){
System.out.println("Animal的⽆参构造");
}
public Animal(String s){
System.out.println("Animal的有参构造");
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论