Java从入门到精通04-类、对象

Java语言是面向对象的,计算机语言的发展向接近人的思维方式演变;

类和对口箱的区别和联系
1、类是抽象的,概念的,代表一类事物,比如人类、猫类...
2、对象是具体的,实际的,代表一个事物,比如张三、李四...
3、类是对象的模板,对象是类的一个个体、实例;

一个全面类的定义模板:

package 包名;
class 类名 extends 父类 implements 接口名{
    成员变量;
    构造方法;
    成员方法;
}

类的成员方法的参数可以是多个,方法可以没有返回值;

构造方法是类的一种特殊方法,它的主要作用是完成对新对象的初始化,它有如下特点:
1、构造方法名和类名相同;
2、构造方法没有返回值;
3、主要作用是完成对新对象的初始化;
4、在创建一个类的新对象时,系统会自动的调用该类的构造方法完成新对象的初始化;
5、一个类可以定义多个构造方法;
6、每个类都有一个默认的构造方法,当定义了构造方法后,将会替换默认构造方法;

1 class Person{
2     int age;
3     String name;
4     //构造方法
5     public Person(int age,String name){
6         this.age=age;
7         this.name=name;
8     }
9 }

this不能再类定义的外部使用,只能在类定义的方法内使用。

类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的值都是相同的,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

类变量的定义方法:访问修饰符 static 数据类型 变量名;
类变量的访问方法:类名.类变量名 或者 对象名.类变量名;

public class Child {
    int age;
    String name;
    static int total = 0;   //静态变量,可以被任何一个对象访问

    public Child(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public void joinGame() {
        total++;
    }
}

类方法属于所有对象实例的,形式如:访问修饰词 static 数据返回类型 方法名(){};
类方法中不能访问非静态变量(类变量);
类方法可以通过"类名.类方法名"直接访问;
类方法属于与类相关的公共方法;

public class Student {
    int age;
    String name;
    int fee;
    static int totalFee;

    public Student(int age, String name, int fee) {
        this.age = age;
        this.name = name;
        totalFee += fee;
    }

    //返回总学费,这是一个类方法,节省内存开销,原则上通过"类名.类方法"去访问
    public static int getTotalFee() {
        return totalFee;
    }
}

Java面向对象编程的四大特征:抽象、封装、继承、多态;

抽象:就是把一类事物的共有属性和行为提取出来,形成一个屋里模型,这种研究问题的方法称为抽象;
封装:就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作;
继承:可以解决代码复用,让我们的编程更加靠近人的思维,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有子类不需要重新定义这些属性和方法,只需通过extends语句来声明继承父类,class 子类 extends 父类;父类的public、protected和默认的都可以继承;
多态:就是指一个引用在不同情况下的多种状态,也可以理解为:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。

继承注意事项:
1、子类最多只能继承一个父类(指直接继承);
2、java所有类都是Object类的子类;
3、jdk中的包中包含类、接口、异常、枚举、注释和错误;

访问控制修饰符
1、公开级别:用public,对外公开;
2、受保护级别:用protected修饰,对子类和同一个包中的类公开;
3、默认级别:没有修饰符,向同一个包的类公开;
4、私有级别:用private修饰,只有类本身可以访问,不对外公开;

包(package)的作用:
1、区分相同名字的类;
2、当类很多时,可以很好的管理类;
3、控制访问范围;

方法重载(overload):就是在类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数;
1、方法名相同;
2、方法的参数类型,个数,顺序至少有一项不同;
3、方法返回类型可以不同;

方法覆盖(override):就是子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法。
1、子类的方法的返回类型、参数、方法名称,要和父类方法的返回类型、参数、方法名称完全一样;
2、子类方法不能缩小父类方法的访问权限;

public class Demo {
    public static void main(String args[]) {
        Master master = new Master();
        master.feed(new Dog(), new Bone());
        master.feed(new Cat(), new Fish());
    }
}

class Animal {
    String name;
    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 void cry() {
        System.out.println("不知道怎么叫");
    }

    public void eat() {
        System.out.println("不知道吃什么");
    }
}

class Cat extends Animal {
    public void cry() {
        System.out.println("喵喵叫");
    }

    public void eat() {
        System.out.println("猫喜欢吃鱼");
    }
}

class Dog extends Animal {
    public void cry() {
        System.out.println("汪汪叫");
    }

    public void eat() {
        System.out.println("狗喜欢吃骨头");
    }
}

class Food {
    String name;

    public void showName() {

    }
}

class Fish extends Food {
    public void showName() {
        System.out.println("鱼");
    }
}

class Bone extends Food {
    public void showName() {
        System.out.println("骨头");
    }
}

class Master {
    //使用多态,方法就可以用一个
    public void feed(Animal an, Food f) {
        an.eat();
        f.showName();
    }
}
时间: 2024-10-13 12:25:13

Java从入门到精通04-类、对象的相关文章

《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门语言,但基本都只是了解了一个大概,入门肯定也算不上了.顶多也就能吹吹牛,说几个大的概念而已. 公司最近转型,决定抛弃PHP了,我们的出路是:要么H5,要么JAVA,要么走人.纠结了一段时间后,决定还是转JAVA了. 当一个人在自己熟悉的领域的时候,好像说什么都很有自信,都觉得自己是对的.那时候我们的

Java从入门到精通pdf电子版

Java从入门到精通pdf电子版 链接:https://pan.baidu.com/s/1nzy8LV6d2_qAD3oKS-Fj9Q 提取码:at3x 简介: <Java从入门到精通>从初学者小白角度出发,通过通俗易懂的白话语言.丰富多彩的实战实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术和技能,让你在编程开发中越走越远 目录 · · · · · · 第一篇 基础篇 第1章 Java概述 第2章 Java基本语言 第3章 控制流程语句 第4章 数组 第二篇 面向对象 第5章

wp8 入门到精通 Utilities类 本地存储+异步

public class CCSetting { public async static void AddOrUpdateValue<T>(string key, T value) { try { if (key != null) { StorageFolder floder = ApplicationData.Current.LocalFolder; if (!(await floder.GetFoldersAsync()).Any(a => a.Name == "DrieS

《Java从入门到精通》第十章学习笔记

第10章 Java集合类 一.概述 Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用.常用的集合有List集合.Set集合.Map集合,其中List和Set实现了Collection接口. 二.集合类接口的常用方法 1.List接口的常用方法:因为继承了Collection接口,所以List接口也继承了Collection中的所有方法.List集合以线性有序的方式存储对象.List集合中可以包含重复的对象,的主要方法如下: (1

《Java从入门到精通》第十三章学习笔记

第十三章 Swing程序设计 一.Swing概述 Swing是GUI(图形用户界面Graphic User Interface)开发工具包,在AWT(抽象窗口工具 Abstract Windows Tool)的基础上使开发跨平台的Java应用程序界面成为可能.使用Swing开发的Java程序,其界面是不受本地系统平台限制的. 二.Swing常用窗体 1.JFrame框架窗体 JFrame窗体是一个容器,它是Swing程序中各个组建的载体,可以通过继承java,swing.JFrame类创建一个窗

《Java从入门到精通》学习总结3

1. 3种构成重载的条件: 参数类型不同.参数个数不同.参数顺序不同 只有返回值类型不同并不足以区分两个方法的重载. 2. import关键字除了导入包之外,还可以导入静态成员,这是JDK 5.0以上版本提供的新功能.导入静态成员可以使程序员编程更加方便 package com.lzw; import static java.lang.Math.max; import static java.lang.System.out; public class ImportTest { public st

Java 从入门到精通随笔1

1.java中的main方法必须声明为public static void.String args[]是一个字符串类型的数组,是main()方法的参数. 2.基本数据类型Java有8种基本数据类型:数值型(整数类型(byte.short.int.long),浮点类型(float,double)),字符型,布尔型. 3.整数类型byte:8位 -128~127short:16位 -32768~~32767int:32位 -2147483648~2147483647long:64位 4.浮点类型单精

《Java从入门到精通》第五章

第五章 字符串 5.1 String 类 5.1.1  声明字符串 String str=[null] 5.1.2  创建字符串 String (char a[] 方法): String(char a[],int offset,int length);//参数offset表示开始截取字符串的位置,length表示截取字符串的长度 String(char[].value)//该构造方法可分配一个新的string对象,使其表示字符数组参数中所有元素连接的结果: 5.2 连接字符串 5.2.1  连接

Java从入门到精通05-抽象类、接口、Final

1.父类方法不能确定时 ,可以用abstract关键字来修饰该方法: 2.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实现: 抽象类的注意事项:1.抽象类不能被实例化:2.抽象类不一定要包含抽象方法,也就是说,抽象类可以没有abstract方法:3.一旦包含类abstract方法,则这个类必须声明为abstract:4.抽象方法不能有主体,如:abstract void aaa(){}: ------------------------------------------