目录
类的继承
一个类继承另一个类需要使用另一类需要使用的关键字extends
使用方法为
class Child extends Parent{}
java只支持单继承所以一个类只能有一个父类
所以不能以下面这种方式输入代码
class Child extends Parent1 Parent2{}
这串代码是错误的
子类在继承父类后,子类可以调用父类的构造方法
例题7.1
class Parent{
public parent(){
System.out.println("调用父类构造方法");
}
}
class Child extends Parent{
public Child(){
System.out.println("调用子类构造方法");
}
}
public class Demo{
public static void main(String[] args){
new Child();
}
}
例题7.2
package zuoye1;
public class 例题72 {
String button = "button:0~9";
void call() {
System.out.println("开始拨打电话");
}
}
class Mobile extends 例题72下{
String screen ="screen:液晶屏";
}
public class Demo2{
public static void main(Steing[]args) {
Mobile motto = new Mobile();
System.out.println(motto.button);
System.out.println(motto.screen);
motto.call();
}
}
Object类
Object包括clone(),finalize等等方法
Object类中的几个重要方法
1.getClass()方法
语法
getClass().getname();
例题7.3
public class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "我叫" + name+", 今年" + age + "岁。";
}
public static void main(String args) {
Student s1 = new Student("张三", 16);
System.out.println(s1);
Student s2 = new Student("李四", 19);
System.out.println(s2);
}
}
例题7.4
public class People {
int id;
String name;
public People(int id,String name) {
this.id = id;
this.name =name;
}
public boolean equals(Object obj) {
if(this ==obj)
return false;
if(obj ==null)
return false;
if(getClass()!=obj.getClass())
return false;
People other =(People)obj;
if(id!=other.id)
return false;
return false;
}
public String toString() {
return name;
}
public static void main(String[] args) {
People p1 =new People(220,"tom");
People p2 =new People(220,"汤姆");
People p3 =new People(330,"张三");
Object o =new Object();
System.out.println(p1+"与"+p2+"是否为同一人?");
System.out.println("equals()方法的结果:"+p1.equals(p2));
System.out.println("==运算符的结果:"+(p1==p2));
System.out.println();
System.out.println(p1+"与"+p3+"是否为同一人?");
System.out.println(p1.equals(p3));
System.out.print(p1+"与"+o+"是否为同一人?");
System.out.println(p1.equals(o));
}
}
对象类型的转换
向上转型
子类对象赋值给父类引用、
animal a = new Dog();
例题7.5
class People{}
class Teacher extends People{}
public class Demo3{
public static void main(String[]args){
People tom = new Teacher();
}
}
自动类型转换
向下转型
父类对象赋值给子类引用
Dog a = (Dog)new Animal();
例题7.6
public class Bird {}
class Pigeon extends Bird{}
public class Demo4{
public static void main(String[] args) {
Bird bird =new Pigeon();
Pigeon pigeon =bird;
}
}
使用instanceof关键字判断对象类型
语法
myobject instanceof ExampleClass
例题7.7
class Quadrangle{}
class Squar extends Quadrangle{}
class Circular{}
public class Demo5{
public static void main(String args[]){
Quadrangle q=new Quadrangle();
Square s = new Square();
System.out.println(q instanceof Square);
System.out.println(s instanceof Quadeangle);
System.out.println(q instanceof Circular);
}
}
方法重载
例题7.8
public class OverLoadTest {
public static int add(int a,int b) {
return a+b;
}
public static double add(double a,double b) {
return a+b;
}
public static int add(int a) {
return a;
}
public static int add(int a,double b) {
return a;
}
public static int add(double a,int b) {
return b;
}
public static void main(String[] args) {
System.out.println("调用add(int,int)方法:"+add(1,2));
System.out.println("调用add(double ,double)方法:"+add(2.1,3.3));
System.out.println("调用add(int)方法:"+add(1));
System.out.println("调用add(int,double)方法:"+add(5,8.0));
System.out.println("调用add(double,int)方法:"+add(5.0,8));
}
}
例题7.9
public class OverLoadTest2 {
public static int add(int a,int b) {
return a+b;
}
public static double add(double a,double b) {
return a+b;
}
public static int add(int a) {
return a;
}
public static int add(int a,double b) {
return a;
}
public static int add(double a,int b) {
return b;
}
public static int add(int...a) {//
int s =0;
for(int i=0;i<a.length;i++) {
s +=a[i];
}
return s;
}
public static void main(String[] args) {
System.out.println("调用add(int,int)方法:"+add(1,2));
System.out.println("调用add(double ,double)方法:"+add(2.1,3.3));
System.out.println("调用add(int)方法:"+add(1));
System.out.println("调用add(int,double)方法:"+add(5,8.0));
System.out.println("调用add(double,int)方法:"+add(5.0,8));
System.out.println("调用不定长数方法:"+ add(1,2,3,4,5,6,7,8,9));
System.out.println("调用不定长数方法:"+ add(1));
}
final关键字
final修饰变量———不可改变的量(常量)
final修饰方法————不能被重写
final修饰类——不能被继承
例题7.10
public class FinalData {
static final double PI = 3.1415926;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("圆周率的值为:"+PI);
System.out.println("半径为3的圆的周长为:"+(2*3*PI));//尝试修改PI的值
PI = 3.1415927;
}
}
例题.7.11
cass Dad{
public final void turnOnTheTV(){
System.out.println("爸爸打开了电视");
}
}
calass Baby extends Dad{
public final void turnOnTheTV(){
System.out.println("宝宝也要打开电视");
}
}
final 类
语法
final 类名{}
抽象
抽象方法 abstract(抽象)
修饰符 abstract 返回参数 方法名 (传入参数);
抽象类 有抽象方法的类一定是抽象类
修饰符 abstract class 类名{
}
如果父类是抽象类,子类是普通类那么重写抽象方法加入方法体
多态
利用多态可以使程序具有良好的打展性,并可以对所有类对象进行通用的处理。在7.3节中已经学习过子类对象可以作为父类的对象实例使用,这种将子类对象视为父类对象的做法称为“向上转型”。假如现在要编写个绘制图形的方法 drawO,如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现,定义如下:
public vold draw(Square s){
//绘制正方形的方法
public void draw(Circular cK
//绘制圆形的方法
例题7.12
class Shape{}//图形类
class Square extends Shape{}//正方形类继承圆形类
class Circular extends Shape{}//圆形类继承图形类
public class Demo6 {
public static void draw(Shape s) {//绘制方法
if (s instanceof Square) {//如果是正方形
System.out.println("绘制正方形");
}else if(s instanceof Circular) {//如果是圆形
System.out.println("绘制图形");
}else {//如果是其他类型
System.out.println("绘制父类图像");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
draw(new Shape());
draw(new Square());
draw(new Circular());
}
}
结果
接口
接口 所有方法都是抽象方法
修饰符 interface 接口名{
}
实现 implements
java语言每个类可以实习多个接口
修饰符 class 类名 implements 接口1 ,接口2,...{
}
例题7.13
interface Paintable{
public void draw();
}
class Quadrangle{
public void doAnything(){
System.out.println("四边形提供的方法");
}
}
class Parallelogram extends Quadrangle implements Paintable{
public void draw(){
System.out.println("绘制平行四边形");
}
}
class Spuare extends Quadrangle implements Paintable{
public void draw(){
System.out.println("绘制正方形形");
}
}
class Circular implements Paintable {
public void draw() {
System.out.println("绘制圆形");
}
}
public class Demo3 {
public static void main(String[] args) {
Spuare s =new Spuare();
s.draw();
s.doAnything();
Parallelogram p = new Parallelogram();
p.draw();
p.doAnything();
Circular c = new Circular();
c.draw();
}
}