this代表对象的实例
public class demo{
public static void main(String []args)
{
Dog dog1=new Dog();
Person p1=new Person(dog1,23,"小刚");
p1.showInfo();
}
}
class Person
{
int age;
String name;
Dog dog;
public Person(Dog dog,int age,String name){
this.dog=dog;
this.age=age;
this.name=name
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Dog{
String name;
}
=================================================
统计总共实例化了多少个对象
static
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++;
}
}
访问的时候可以使用任何一个对象 如child1.total 也可以使用child.total
类变量
访问修饰符 static 数据类型 名称
访问变量 类.变量名 对象.变量名
public class Demo3_2{
static int i=1;
static
{
i++;//该静态区域,只执行一次,无论实例化与否
}
public Demo3_2(){
i++
}
public static void main(String []args){
Demo3_2 t1=new Demo3_2();
System.out.println(t1.i);
Demo3_2 t2=new Demo3_2();
System.out.println(t2.i);
}
}
//打印结果是3 4
========================================================
类方法
class Stu
{
int age;
String name;
int fee;
Static int totalFee;
public Stu(int age,String name,int fee){
this.age=age;
this.name=name;
totalFee+=fee;
}
public static int getTotalFee()//这是类方法,静态方法
{
return totalFee;
}
}
静态方法只能访问静态变量 ,不能访问非静态变量
=================================================
面对对象的几大特征,封装继承,多态(对象的多种状态),抽象
修饰符有public,protect,默认,private
包
包的作用
区分相同名字的类
当类很多时,可以很好管理
控制访问范围
=================================
类的继承
除了private外,其他的都能被子类继承,java不能多重继承,c++可以
package qgm; public class demo1 { public static void main(String[] args) { // TODO 自动生成的方法存根 } } //将学生的共同属性抽象出来,做一个父类 class Student { public int age; public String name; public float fee; //交学费 public void pay(float fee) { this.fee=fee; } } //小学生 class Pupil extends Student { //交学费 public void pay(float fee) { this.fee=fee; } } //中学生 class MidStu extends Student { //交学费 public void pay(float fee) { this.fee=fee*0.5f; } } //大学生 class ColStu extends Student { //交学费 public void pay(float fee) { this.fee=fee*0.1f; } }
============================================ 方法重载,在类中,同样的方法名,调用时取决于方法参数类型,个数,不一样 只是返回类型不一样,不能构成重载。如果只是控制访问符不一样,也不能构成重载 方法的覆盖-----重写 就是子类重写父类的方法 抽象类 abstract class Animal{ int age; String name; abstract public void cry(); } //当一个类的父类是抽象类时,需要把抽象类的抽象方法实现 class Cat extends Animal{ public void cry(){ } } //抽象类是不能实例化的,无论是否有抽象方法 抽象方法不能有主题 ================================== 接口 当一个类实现了接口,那就必须把该接口的方法都实现了 原则:接口不能被实例化,和抽象函数一样 接口方法不能有主体也不能有实现的方法,但是抽象类可以有实现的方法。 一个类可以实现多个接口 接口中可以右变量,但是不能用protect,private等修饰符,本质是static,而且还是final。可以作为全局变量使用,使用方法是 接口名.变量名 一个接口不能继承类,但是可以继承其他的类 /** * */ package com.test; /** * @author Administrator * */ public class Test { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 Computer computer=new Computer(); Camera camera1=new Camera(); computer.useUsb(camera1); } } interface Usb{ public void start(); public void stop(); } class Camera implements Usb{ public void start(){ }; public void stop(){ }; } class Computer{ //直接使用接口 public void useUsb(Usb usb){ usb.start(); usb.stop(); } } ========================================================== 多态:一个引用在不同情况下的多种状态 继承和实现接口都能构成多态 /** * */ package com.test; /** * @author Administrator * */ public class Test { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 Animal an =new Cat(); an.cry(); an=new Dog(); an.cry(); } } 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("动物叫"); } } class Dog extends Animal { public void cry() { System.out.println("旺旺"); } } class Cat extends Animal { public void cry() { System.out.println("喵喵"); } } ============================================