public class animal
{
 public String talk()
  {return "animal noise";
    }
}
_____________________________
public class dog extends animal
{
public String talk()
  {return "bark";
    }
public String talk2()
  {return "bark-bark";
    }
}
_____________________________
public class main
{
 public static void main(String args[]) throws IOException
   {dog b = new dog();
       System.out.println(b.talk());  // ok
       System.out.println(b.talk2());  // ok
    }
}
______________________________________
public class main
{
 public static void main(String args[]) throws IOException
   {animal b = new dog();
       System.out.println(b.talk());  // ok and will bark
       System.out.println(b.talk2());  // won't work - animal doesn't have talk2
    }
}
________________________________

public class main5
{
 public static void main(String args[]) throws IOException
   {animal b = new dog();
       System.out.println(b.talk());  
       
       System.out.println((dog)(b).talk2());  // won't work - does b.talk2 first
    }
}
Thought above would work - cast  b to a dog to let it know it is a 
dog and can access dog methods in addition to animal methods
______________________________________
Concept above was correct - syntax was wrong
Must be done like this
public class main5
{
 public static void main(String args[]) throws IOException
   {dog b = new dog();
       System.out.println(b.talk());  
       System.out.println(((dog)b).talk2());  
    }
}