栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java——面向对象(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java——面向对象(三)

面向对象语言的三大特征:

                                     封装、继承、多态

1. 面向对象的特征——封装

定义:将类的某些信息隐藏起来(访问权限修饰符),不让在外部直接对其访问,可以通过一个特定的方法,来对隐藏的信息进行访问,便于访问。

例1:

public class Student {
    private  String name;//隐藏类的属性
    private  int age;
    public Student(){

    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("张三");
        System.out.println(stu.getName());
        stu.setAge(16);
        System.out.println(stu.getAge());
    }
}

例2:

设计模式:解决某一类问题的解决方案(模式)

单例模式 ---> 让一个类在一个程序,只能创建一个对象。

public class studentDao {
    private static studentDao stu = null;
    private studentDao(){

    }
//将构造方法私有化,在其他类中不能随便使用
    public static studentDao getStu(){
        if(stu == null){
            stu = new studentDao();
            return stu;
        }
        return stu;
    }

    public static void main(String[] args) {
        System.out.println(studentDao.getStu());
        System.out.println(studentDao.getStu());

    }
}
2. 面向对象的特征——继承 2.1 继承

定义:子继承父,实现代码的重用,提高代码的可扩展性。

什么清空下使用继承?

是用一类,什么是什么,is-a关系

将子类的共有的属性和方法

语法:[ 访问权限修饰符][修饰符] 子类名  extends  父类名{  }

名词:父类(基类)         子类(派生类)

继承的传递性:

C类继承B类,B类继承A类,C类继承B、C类中非私有的属性和方法。

使用extends 关键字

一个类只能直接继承一个父类,继承后子类就可以使用父类中非私有的成员方法和属性,

在子类中可以扩展子类特有的属性和方法。

//当一个类中没有显示的继承某个类,那么这个类默认继承object类,object这个类是所有类的基类
//public class Animal extends Object{}
public class Animal{
    //成员变量
    private String name;
    private int age;
    //构造方法
    public Animal(){
      
    }
    //访问私有成员属性的入口
    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 void eat(){
        System.out.println(name + "吃东西");
    }
}
public class Panda extends Animal{
    public Panda(){
       
    }
    public void eat(){
        System.out.println("构造方法");
        super.eat();
    }
    public void play(){
        System.out.println("功夫熊猫");
    }
}
public class Yu extends Panda{
    public Yu(){
        
    }
    
    public void KongFu(){
        System.out.println("鱼鱼是只会耍双节棍的熊猫");
    }

}
public class Test {
    public static void main(String[] args) {
        //调用父类的非私有方法
        Dog dog = new Dog();
        dog.setName("小段");
        dog.setAge(5);
        dog.eat();
        System.out.println(dog.getName());
        System.out.println(dog.getAge());
        //调用父类的非私有方法
        Panda panda = new Panda();
        panda.setName("食铁兽");
        panda.setAge(7);
        panda.eat();
        //子类特有的方法
        panda.play();

        //继承具有传递性 C继承B,B继承A  C类具有B、A类中的非私有的属性和方法。
        Yu yu = new Yu();
        yu.setAge(5);
        yu.setName("鱼鱼");
        System.out.println(yu.getName());
        System.out.println(yu.getAge());
        yu.eat();
        //调用父类
        yu.play();
        //调用父类的父类
        yu.KongFu();
    }

}
 2.2 继承的构造方法

在创建一个子类对象后,调用构造方法时,从上向下调用,先初始化父类信息

使用super() 在子类构造方法的第一行默认执行,调用父类无参的构造方法。

super() 表示调用父类中无参构造,默认存在的,必须放在第一行。

public class Animal extends Object{
    private String name;
    private int age;
    public Animal(){
        super();
        System.out.println("animal类的无参构造方法");
    }
    public Animal(int age){
        this.age = age;
        System.out.println("Animal类的有参构造方法");
    }
    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 void eat(){
        System.out.println(name + "吃东西");
    }
}
public class Panda extends Animal{
    public Panda(){
        super();
        System.out.println("Panda类的无参构造方法");
    }
    public Panda(int age){
        super(age);
        System.out.println("Panda类的有参构造方法");
    }
    @Override
    public void eat(){
        System.out.println("熊猫抱着竹子吃");

    }
    public void play(){
        System.out.println("功夫熊猫 : 呼呼哈嘿");
        super.eat();
    }
}
public class Yu extends Panda{
    public Yu(){
        super();
        System.out.println("Yu的无参构造方法");
    }
    public Yu(int age){
        super(age);
        System.out.println("Yu的有参构造方法");
    }
    public void KongFu(){
        System.out.println("鱼鱼是只会耍双节棍的熊猫");
    }

}
public class Test1 {
    public static void main(String[] args) {
        Yu yu1= new Yu(5);
        //继承具有传递性 C继承B,B继承A  C类具有B、A类中的非私有的属性和方法。
        Yu yu = new Yu();
        yu.setAge(5);
        yu.setName("小鱼儿");

        System.out.println(yu.getName());
        System.out.println(yu.getAge());
        yu.eat();
        //调用父类
        yu.play();
        //调用父类的父类
        yu.KongFu();

    }
}

 

2.3 方法的重写

原因:当父类的方法实现不能满足子类需求时,需要进行重写

方式:在子类中对父类中的方法进行重写

规则:

  • 方法名相同
  • 参数列表相同
  • 返回值类型相同
  • 访问权限修饰符不能等于或者大于父类的权限

@override  Java中提供的一个注解标签(一种标记)

添加此注解的标签表示此方法是从父类重写过来的,就会对其进行语法验证。

注:@overload(重载)

public class Animal extends Object{
    private String name;
    private int age;
    public Animal(){
    }
    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 void eat(){
        System.out.println(name + "吃东西");
    }
}
public class Panda extends Animal{
    public Panda(){
    }
    @Override    //Java中提供的一个注解标签(一种标记)
    public void eat(){
        System.out.println("熊猫抱着竹子吃");

    }
    public void play(){
        System.out.println("功夫熊猫 : 呼呼哈嘿");
        super.eat();
    }
}
public class Yu extends Panda{
    public Yu(){
    }
    public void KongFu(){
        System.out.println("鱼鱼是只会耍双节棍的熊猫");
    }

}
public class Test2 {
    public static void main(String[] args) {
        Yu yu = new Yu();
        yu.setName("小鱼儿");
        yu.setAge(1);
        yu.eat();
        yu.play();
        
    }
}

 

3. 抽象类

4. 面向对象的特征——多态

5. final关键字

6. 接口

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号